在 SQL (MSSQL) 中有条件插入多行

问题描述 投票:0回答:3

我对 SQL 不太有经验,希望你能在这里帮助我。 我需要在表中插入多行(数百行),但我不想手动插入每一行。一定有办法做到这一点,对吗?

表格如下所示:(MSSQL)

id 用户FK appUserFK 日期A 创建者 日期B 更改者 旗帜
1 3 7 2023-7-28 2023-7-28
2 4 7 2023-7-28 2023-7-28
2 5 7 2023-7-28 2023-7-28
3 9 12 2023-7-28 2023-7-28

现在我想添加与

appUserFK = 7
一样多的行。对于每个具有
appUserFK = 7
的条目,我想添加另一个具有相同
userFK
但具有
appUserFK = 16
19
的条目。这样,每行
userFK
都有对应的
appUserFK of 7
,也都有一行带有
appUserFK of 16 and 19
。 我的单个插入查询将如下所示:

INSERT INTO [myTable].[dbo].[user] (userFK, appUserFK, dateA, createdBy, changedBy)
VALUES (3, 16, GETDATE(), 'Josh', GETDATE(), 'Josh');

INSERT INTO [myTable].[dbo].[user] (userFK, appUserFK, dateA, createdBy, changedBy)
VALUES (4, 16, GETDATE(), 'Josh', GETDATE(), 'Josh');

INSERT INTO [myTable].[dbo].[user] (userFK, appUserFK, dateA, createdBy, changedBy)
VALUES (5, 16, GETDATE(), 'Josh', GETDATE(), 'Josh');

等等... 我进行了搜索,但没有找到适合我的特殊情况的信息。 预先感谢!

编辑:DBMS 是 MSSQL。 我尝试了这个查询,但它不起作用:

INSERT INTO myTable (userFK, appUserFK, dateA, createdBy, changedBy) 
SELECT userFK, 16, GETDATE(), 'Josh', GETDATE(), 'Josh' FROM myTable WHERE appUserFK = 7 
AND NOT EXISTS(SELECT userFK FROM myTable WHERE appUserFK = 16);
sql sql-server sql-insert
3个回答
2
投票

您可以使用 INSERT 和 SELECT 的组合来实现您想要的。 我有一个例子给你:

INSERT INTO Customers_Backup (CustomerID, CustomerName, ContactName,     Country)
SELECT CustomerID, CustomerName, ContactName, Country 
FROM Customers
WHERE Country='Mexico'

此查询将客户表中包含国家/地区“墨西哥”的所有行插入到customers_backup中。您也可以使用硬编码数据,而不是复制所有数据。如果您需要进一步的帮助,或者这个提示是否足以让您解决您的具体问题,请告诉我。


1
投票

您可以使用 SQL INSERT INTO SELECT 语句:

insert into [user](userFK, appUserFK, dateA, createdBy, changedBy)
select userFK, 16, dateA, createdBy, changedBy
from [user]
where appUserFK = 7
union all
select userFK, 19, dateA, createdBy, changedBy
from [user]
where appUserFK = 7

1
投票

您可以基于 SELECT 查询而不是单独进行 INSERT。即使在 appUserFK 为 7 的地方添加更多记录,这也会起作用。UNION ALL 部分组合了两个 SELECT,以便它们可以插入在一起。

类似这样的:

DECLARE @DateNow AS date

SET @DateNow = GETDATE() -- to save repeatedly fetching the date

INSERT INTO [user] (userFK, appUserFK, dateA, createdBy, dateB, changedBy)
  SELECT 
    userFK, 
    16, 
    @DateNow, 
    'Josh', 
    @DateNow,
    'Josh'
  FROM
    [user]
  WHERE
    appUserFK = 7
  UNION ALL
  SELECT 
    userFK, 
    19, 
    @DateNow, 
    'Josh', 
    @DateNow,
    'Josh'
  FROM
    [user]
  WHERE
    appUserFK = 7
© www.soinside.com 2019 - 2024. All rights reserved.