2016-10-11 8 views
0

2つのテーブルのデータを含む行を挿入しようとしています。最初のテーブルはユーザーのAspNetUsersで、2番目のテーブルはAspNetUserRolesです。私はすべてのユーザーに同じ役割を与えたいと思います。私は、次のことを試してみました:複数のSELECTSを持つSQL INSERT INTO異なるテーブルから

INSERT INTO [MyDB].[dbo].[AspNetUserRoles] ([UserId], [RoleId]) 
    SELECT (SELECT Id FROM [MyDB].[dbo].AspNetUsers) AS UserId, 
(SELECT Id FROM [MyDB].[dbo].[AspNetRoles] WHERE Name = 'Intermediary') AS RoleId 

私はエラーを取得する:

サブクエリは複数の値を返しました。 =、!=、<、< =、>、> =、またはサブクエリが式として使用されているときには使用できません。

これは、クエリですべてのユーザーが選択されているためです。私のSQLは、各ユーザーと同じロールIDを挿入するように変更する必要があります。

私はカーソルを使う必要があるかもしれないと思いますが、どうすればいいですか?私はMS SQL Serverを使用しています。

+0

は、彼らがすべての一致するフィールド – TheGameiswar

+0

なぜあなたはストアドプロシージャを使用しないでくださいを持っていない別の方法ですか? –

+0

内部サブクエリの1つが複数の行を返します。サブクラスをスキップして、代わりに結合を実行します。 – jarlh

答えて

3

これは動作するはず:

INSERT INTO [MyDB].[dbo].[AspNetUserRoles] 
    ([UserId], [RoleId]) 
SELECT 
    Id, 
    (SELECT Id FROM [MyDB].[dbo].[AspNetRoles] WHERE Name = 'Intermediary') AS RoleId 
FROM 
    [MyDB].[dbo].AspNetUsers 

限りWHERE Name = 'Intermediary'としてリターン1行。ここで

+0

ありがとう、これは完全に働いた –

+0

'Intermadiatery'のためのただ1つのIDがあると仮定すれば働く。小さな改善は.... SELECT TOP 1 Id FROM ..内側のselect -queryで。 –

+0

仲介者は1つだけです。ありがとう –

1

INSERT INTO [MyDB].[dbo].[AspNetUserRoles] 
      ([UserId],[RoleId]) 
SELECT ANU.Id AS [UserId], 
     ANR.Id AS [RoleId] 
FROM [MyDB].[dbo].AspNetUsers ANU 
     CROSS JOIN [MyDB].[dbo].[AspNetRoles] ANR 
WHERE ANR.NAME = 'Intermediary' 
関連する問題