我对 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);
您可以使用 INSERT 和 SELECT 的组合来实现您想要的。 我有一个例子给你:
INSERT INTO Customers_Backup (CustomerID, CustomerName, ContactName, Country)
SELECT CustomerID, CustomerName, ContactName, Country
FROM Customers
WHERE Country='Mexico'
此查询将客户表中包含国家/地区“墨西哥”的所有行插入到customers_backup中。您也可以使用硬编码数据,而不是复制所有数据。如果您需要进一步的帮助,或者这个提示是否足以让您解决您的具体问题,请告诉我。
您可以使用 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
您可以基于 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