2016-10-11 100 views
0

我試圖從2個表中插入數據行。第一個表是我的用戶AspNetUsers和第二張表AspNetUserRoles。我想給所有用戶相同的角色。我曾嘗試以下: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需要修改以插入每個用戶和相同的RoleId。

我想我可能需要使用遊標,或者我應該怎麼做呢?我正在使用MS SQL Server。

+0

他們有爲什麼你不應該使用存儲過程的任何匹配字段 – TheGameiswar

+0

? –

+0

其中一個內部子查詢返回多個行。跳過子查詢,而不是連接。 – 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'只有一個Id,小改進將是... SELECT TOP 1 ID FROM ..在內部select -query。 –

+0

中介只有1個Id。謝謝 –

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'