【发布时间】:2021-07-21 15:48:04
【问题描述】:
我有以下从 C# 程序发送的 SQL 查询:
DECLARE @id as int
SELECT @id = max(fault_catagory_ident) FROM fault_catagory_list
INSERT INTO fault_catagory_list (fault_catagory_ident, fault_catagory)
VALUES (@id + 1, 'TEST')
SELECT @id + 1
'fault_catagory' 值来自我的程序,但 ident 值需要是数据库中现有表中的下一个数字(主键)。我的 C# 代码正在参数化安全值。
我有两个问题:
- 如何将@id + 1 值返回给我的程序(executeNonQuery 不返回任何内容)?
- 如何获取 @id 作为插入命令的参数化值?
我想知道我的主键是否可以以某种方式自动化?
我想在一个查询中完成所有这些操作,因为会有多个登录运行同一查询的风险。如果有任何碰巧同时运行,@id 值可能会重复,并且会失败。
抱歉,如果这里没有足够的信息,我正在学习中!
任何建议将不胜感激。提前致谢。
【问题讨论】:
-
您正在寻找
IDENTITY()功能 -
永远不要使用这样的代码。它保证重复值。这也是完全没有必要的。您可以创建一个带有
IDENTITY约束的列,让数据库生成唯一值 -
您可以轻松编写单个
INSERT并使用OUTPUT子句返回任何生成的值。将IDENTITY约束添加到fault_catagory_ident并使用INSERT INTO fault_catagory_list (fault_catagory) OUTPUT inserted.fault_catagory_ident VALUES ('TEST')检索生成的值
标签: c# sql visual-studio sql-insert