我创建了一个动态存储过程,用于更新,插入和删除特定的表:
CREATE PROCEDURE dbo.Pj_Change
@Action Varchar(20),
@TableName Varchar(20),
@InsertQuery Nvarchar(max),
@UpdateQuery Nvarchar(max),
@Where Varchar(50)
AS
BEGIN
DECLARE @SQLString nvarchar(max);
SET NOCOUNT ON
IF(@Action = 'UPDATE')
SET @SQLString = 'UPDATE '+@TableName+' SET '+@UpdateQuery+' WHERE ('+@Where+')';
ELSE IF(@Action = 'INSERT')
SET @SQLString = 'INSERT INTO '+@TableName+' '+@InsertQuery + ';
ELSE IF(@Action = 'DELETE')
SET @SQLString = 'DELETE FROM '+@TableName+' WHERE ('+@Where+')';
EXECUTE sys.sp_executesql @SQLString
END
问题是,我尝试添加到此代码SELECT SCOPE_IDENTITY()
以获取插入的新行ID,输出中得到-1。
我所做的改变是:
@SQLString = 'INSERT INTO '+@TableName+' '+@InsertQuery + '; SELECT SCOPE_IDENTITY()';
为了实现这一目标,我需要做些什么改变?
答案 0 :(得分:1)
没关系,你不应该使用scope_identity
。你有更多的现代结构,比如:
update ... set ... output updated.id where ... -- same for insert and delete
您可以在表格中输出结果(单个插入不需要)或使用上面的简单表格,并使update
语句充当select
并返回值。