仅在表中不存在该记录时插入

时间:2009-09-18 05:59:25

标签: sql-server

我正在使用Sql server 2005。

我必须向我的客户端提供SQL插入脚本。但在插入表格之前。我想检查表中是否已存在记录,不应插入。

以下是插入查询

INSERT INTO [UserPoint].[dbo].[tblStatus]([Type],[Name],[DisplayOrder]) VALUES (UsageLevel,High,1)
INSERT INTO [UserPoint].[dbo].[tblStatus]([Type],[Name],[DisplayOrder]) VALUES (UsageLevel,Medium,2)
INSERT INTO [UserPoint].[dbo].[tblStatus]([Type],[Name],[DisplayOrder]) VALUES (UsageLevel,Low,3)

tblStatus 有四个字段id,type,name,displayorder。其中 ID 是自动生成的。

请帮忙!

感谢。

最诚挚的问候, MS

2 个答案:

答案 0 :(得分:1)

最简单的方法是不存在语句,类似下面的内容应该适合你

注意除非我误解了您的架构,否则我认为您错过了名称和类型列的一些引号,我将它们包含在

下面
if not exists (
    SELECT NULL as test FROM dbo.tblStatus 
    WHERE [Type] = 'UsageLevel' AND [Name] = 'High'
)
BEGIN
    INSERT INTO [UserPoint].[dbo].[tblStatus]([Type],[Name],[DisplayOrder]) 
    VALUES ('UsageLevel','High',1)
END

if not exists (
    SELECT NULL as test FROM dbo.tblStatus 
    WHERE [Type] = 'UsageLevel' AND [Name] = 'Medium'
)
BEGIN
    INSERT INTO [UserPoint].[dbo].[tblStatus]([Type],[Name],[DisplayOrder])
    VALUES ('UsageLevel','Medium',2)
END

if not exists (
    SELECT NULL as test FROM dbo.tblStatus
    WHERE [Type] = 'UsageLevel' AND [Name] = 'Low'
)
BEGIN
    INSERT INTO [UserPoint].[dbo].[tblStatus]([Type],[Name],[DisplayOrder])
    VALUES ('UsageLevel','Low',3)
END

答案 1 :(得分:0)

根据您不想插入的项创建唯一索引,您可以拥有应该有用的多列唯一索引。如果您将此脚本视为临时脚本并且只使用一次,则可以稍后创建索引和删除索引。该索引将阻止重新输入现有项目。