这里的简单问题。
上下文:具有int主键的Transact-SQL表,以及也必须是unqiue的名称(即使它不是主键)。让我们说:
TableID INT,
TableName NVARCHAR(50)
我正在通过存储过程为此功能添加新行(因此,使用参数指定TableName)。
问题:验证表中是否已存在提供的TableName参数的最佳/最简单方法是什么?如果是这种情况,则阻止添加新行?
可以直接在我的AddNewRow存储过程中执行此操作吗?
答案 0 :(得分:6)
如果您正在使用SQL Server 2008,那么您可以在您的sproc中使用MERGE
语句:
MERGE INTO YourTable AS target
USING (VALUES (@tableName)) AS source (TableName)
ON target.TableName = source.TableName
WHEN NOT MATCHED THEN
INSERT (TableName) VALUES (TableName)
您仍应确保TableName
列中包含UNIQUE
constraint。
答案 1 :(得分:5)
答案 2 :(得分:2)
我更希望在列上使用Unique Constraint
,然后明确检查其存在性。
处理异常将导致身份增量(如果存在),
其次可以通过在插入之前检查存在来避免异常,其他方面是更昂贵的操作。
IF EXISTS (SELECT TOP(1) ColName FROM MyTable WHERE ColName=@myParameter)
如果使用唯一约束,您还可以将Unique Nonclustured index
应用于快速检索。