SQL INSERT INTO与来自不同表的多个选择

SQL INSERT INTO与来自不同表的多个选择,sql,sql-server,cursor,Sql,Sql Server,Cursor,我正在尝试插入包含来自2个表的数据的行。第一个表是my users AspNetUsers,第二个表是AspNetUserRoles。我想给所有用户相同的角色。我尝试了以下方法: INSERT INTO [MyDB].[dbo].[AspNetUserRoles] ([UserId], [RoleId]) SELECT (SELECT Id FROM [MyDB].[dbo].AspNetUsers) AS UserId, (SELECT Id FROM [MyDB].[dbo].[A

我正在尝试插入包含来自2个表的数据的行。第一个表是my users AspNetUsers,第二个表是AspNetUserRoles。我想给所有用户相同的角色。我尝试了以下方法:

  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。

这应该可以:

INSERT INTO [MyDB].[dbo].[AspNetUserRoles] 
    ([UserId], [RoleId])
SELECT 
    Id,
    (SELECT Id FROM [MyDB].[dbo].[AspNetRoles] WHERE Name = 'Intermediary') AS RoleId
FROM
    [MyDB].[dbo].AspNetUsers
只要
其中Name='intermediate'
返回1行。

这应该可以:

INSERT INTO [MyDB].[dbo].[AspNetUserRoles] 
    ([UserId], [RoleId])
SELECT 
    Id,
    (SELECT Id FROM [MyDB].[dbo].[AspNetRoles] WHERE Name = 'Intermediary') AS RoleId
FROM
    [MyDB].[dbo].AspNetUsers
只要
其中Name='intermediate'
返回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' 
这是另一种方法

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' 

它们是否有匹配的字段为什么不使用存储过程?其中一个内部子查询返回多行。跳过子查询,改为执行联接。它们是否有任何匹配字段为什么不使用存储过程?其中一个内部子查询返回多行。跳过子查询,改为执行联接。如果假定“Interradiatery”只有一个Id,则该方法有效。小的改进是……从……中选择前1个Id。。在内部select-query中,中间层只有1个Id。如果假设只有一个Id用于“Interradiatery”,那就谢谢了。小的改进是……从……中选择前1个Id。。在内部select-query中,中间层只有1个Id。谢谢