我正在尝试在一个表(比如 MyTable)中插入多条记录(~250),并且仅当它不存在时才想插入一个新行。
我正在使用 SQL Server 2008 R2 并从其他线程(如SQL 条件插入如果行不存在)获得帮助。
虽然我可以通过以下剥离脚本来实现这一点,但我想知道是否有更好(短)的方法来做到这一点,因为我必须对插入的每一行重复此检查。由于我们只需要在 DB 部署期间执行一次此脚本,因此我不太担心性能。
INSERT INTO MyTable([Description], [CreatedDate], [CreatedBy], [ModifiedDate], [ModifiedBy], [IsActive], [IsDeleted])
SELECT N'ababab', GETDATE(), 1, NULL, NULL, 1, 0
WHERE NOT EXISTS(SELECT * FROM MyTable WITH (ROWLOCK, HOLDLOCK, UPDLOCK)
WHERE
([InstanceId] IS NULL OR [InstanceId] = 1)
AND [ChannelPartnerId] IS NULL
AND [CreatedBy] = 1)
UNION ALL
SELECT N'xyz', 1, GETDATE(), 1, NULL, NULL, 1, 0
WHERE NOT EXISTS(SELECT * FROM [dbo].[TemplateQualifierCategoryMyTest] WITH (ROWLOCK, HOLDLOCK, UPDLOCK)
WHERE
([InstanceId] IS NULL OR [InstanceId] = 1)
AND [ChannelPartnerId] IS NULL
AND [CreatedBy] = 1)
-- More SELECT statements goes here