sql - 在表中插入一行并将其范围标识存储在存储过程的变量中

标签 sql sql-server database stored-procedures sql-server-2012

我是存储过程的新手,只知道 SQL 的基础知识。在一些 SO 问题的帮助下,我能够弄清楚 SCOPE_IDENTITY() 函数可用于获取最近添加的行的标识值。现在我正在尝试使用存储过程在表中插入一行,并且我希望必须将这个新插入的行的标识分配给存储过程的变量。以下是代码:

DECLARE @retID int = -1
SET @retID = (INSERT INTO [InfoValues]([InfoID],[Value],[UserID],[DateAdded],[DateUpdated]) VALUES(@item2,@item,@UserID,GETDATE(), GETDATE()); SELECT SCOPE_IDENTITY())

但此代码在 INSERT 子句处显示语法错误。那么正确的做法是什么呢?

最佳答案

你很接近。您需要在插入发生后设置变量。

DECLARE @retID int = -1;

INSERT INTO [InfoValues]
    ([InfoID],[Value],[UserID],[DateAdded],[DateUpdated])     
    VALUES
    (@item2,@item,@UserID,GETDATE(), GETDATE()); 

SET @retID = SCOPE_IDENTITY();

关于sql - 在表中插入一行并将其范围标识存储在存储过程的变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29774934/

相关文章:

sql - 不同记录的计数 - SQL

sql - 行级触发器的替代方案?

html - 关于在 MS Access 数据库中存储带有表格和图像的可搜索文档的建议

SQLite:防止重复

database - 我们如何更新 DB2 中具有外键约束的列?

sql - mysql数据库并发访问问题

python - Psycopg2 连接 sql 数据库到 pandas 数据框

mysql - 从 MySQL 数据库中搜索 LongBlob 列中的文本

sql - ExecuteNonQuery 总是返回 -1,即使 SQL 语句是正确的

sql-server - 计算每月的小时数