在SQL Server 2005中,我在“Is Identity”属性设置为“Yes”的表中有一个“id”字段。所以,当在该表上执行Insert时,“id”会自动设置为下一个递增整数。有没有一种简单的方法,执行插入时得到什么“ID”设置,而不必在插入后执行Select语句?在SQL Server中,执行插入操作时是否可以获取记录的“id”?
12
A
回答
32
在.NET中至少,你可以在一个去发送多个查询服务器。我在我的应用程序中这样做:
command.CommandText = "INSERT INTO [Employee] (Name) VALUES (@Name); SELECT SCOPE_IDENTITY()";
int id = (int)command.ExecuteScalar();
工程就像一个魅力。
1
你必须选择SCOPE_IDENTITY()函数。
要从应用程序代码执行此操作,我通常将此进程封装在存储过程中,因此它对于我的应用程序看起来仍然是一个查询。
3
SCOPE_IDENTITY()是首选的方式,请参阅:6 Different Ways To Get The Current Identity Value
2
SCOPE_IDENTITY();是你最好的选择。如果你使用.NET,只需传递一个参数,并在程序运行后检查值。
CREATE PROCEDURE [dbo].[InsertProducts]
@id INT = NULL OUT,
@name VARCHAR(150) = NULL,
@desc VARCHAR(250) = NULL
AS
INSERT INTO dbo.Products
(Name,
Description)
VALUES
(@name,
@desc)
SET @id = SCOPE_IDENTITY();
14
如果要插入多行,使用上insert
声明OUTPUT
和INSERTED.columnname
条款的是让所有的IDS到一个临时表的简单方法。
DECLARE @MyTableVar table(ID int,
Name varchar(50),
ModifiedDate datetime);
INSERT MyTable
OUTPUT INSERTED.ID, INSERTED.Name, INSERTED.ModifiedDate INTO @MyTableVar
SELECT someName, GetDate() from SomeTable
1
我倾向于使用企业管理器来附加触发器到表。这样你就不用担心在代码中写出额外的sql语句。煤矿是这个样子:
创建触发器tblName 在dbo.tblName 对于插入 作为 选择NEW_ID = @@ IDENTITY
然后,从你的代码中,对待你的INSERT语句像选择报表─只是执行和评估结果。 “newID”列将包含您刚刚创建的行的标识。
0
这可能是最好的有效的解决方案,我发现对于SQL Server .. Sql Server return the value of identity column after insert statement
相关问题
- 1. 插入后获取ID在SQL Server中
- 2. 在PostgreSQL中执行SELECT语句时可以插入记录吗?
- 3. 是否可以记录在SQL Server上执行的每个查询的文本?
- 4. 是否可以在SQL中执行此操作?
- 5. WSO2 ESB,无法使用SQL Server数据库获取记录或执行操作
- 6. SP可以在SQL Server中执行此操作吗?
- 7. 在整个目录上执行操作时是否可以跳过子目录?
- 8. 是否可以在C++ 0x中自动执行以下操作?
- 9. 在html5中执行CRUD操作(SQL Server)
- 10. 检索最后插入记录的ID在SQL Server CE 4
- 11. sql server:我如何获取插入的最后一条记录?
- 12. 获取被插入的记录的ID插入后
- 13. 是否记录了SQL Server超时?
- 14. 是否可以在TFS中执行“破坏历史记录”?
- 15. SQL Server批量插入 - 在操作期间是否应允许其他插入?
- 16. 执行时是否可以记录单个mod-rewrite规则?
- 17. 是否可以在单个查询中执行此操作?
- 18. 是否可以在一个MySQL查询中执行此操作?
- 19. 标记为OneWay的WCF操作是否存在执行超时?
- 20. CodeIgniter - 执行AJAX操作时是否可以更改URL?
- 21. T-SQL是否可以使用单个快速操作进行更新/插入
- 22. 如何在Gupta SQL Base中获取最后插入的记录ID
- 23. 从SQL插入查询中获取新记录主键ID以将相同的值插入另一个表中?
- 24. 获取mysql最后插入ID,插入记录后使用PDO
- 25. 根据LINQ中插入记录的ID更新记录到SQL
- 26. 是否可以在mysqldb中executemany插入后获取所有lastrowids?
- 27. SQL Server 2008 - 从插入触发器执行sp_start_job - 作业是否异步运行?
- 28. 如何在Sql Server中插入新行后获取新的身份标识ID?
- 29. 在将数据插入表之前,是否可以获取Id(IDENTITY)的新值?
- 30. SqlAlchemy:获取插入的最后一条记录的ID
这个解决方案有当只处理单行更新。对于一个好的批量更新解决方案,请参阅kamajo的答案。 – CodeWarrior 2010-01-07 18:57:51
对于那些正在寻找如何使用MySQL的人:只需将SCOPE_IDENTITY替换为LAST_INSERT_ID即可。 或者简单地在MySqlCommand上使用LastInsertedId参数; – 2011-10-04 14:14:43