SQL 使用来自不同表的多个 SELECTS 插入
SQL INSERT INTO with Multiple SELECTS From Different Tables
我正在尝试插入包含来自 2 table 秒的数据的行。第一个 table 是我的用户 AspNetUsers,第二个 table 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
我收到错误:
子查询返回了 1 个以上的值。当子查询跟在 =、!=、<、<=、>、>= 或子查询用作表达式
时,这是不允许的
这是因为查询正在选择我想要的所有用户,但我的 SQL 需要修改以插入每个用户和相同的 RoleId。
我想我可能需要使用游标,或者我应该怎么做?我正在使用 MS SQL 服务器。
这应该有效:
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'
return 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'
我正在尝试插入包含来自 2 table 秒的数据的行。第一个 table 是我的用户 AspNetUsers,第二个 table 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
我收到错误:
子查询返回了 1 个以上的值。当子查询跟在 =、!=、<、<=、>、>= 或子查询用作表达式
时,这是不允许的这是因为查询正在选择我想要的所有用户,但我的 SQL 需要修改以插入每个用户和相同的 RoleId。
我想我可能需要使用游标,或者我应该怎么做?我正在使用 MS SQL 服务器。
这应该有效:
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'
return 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'