我目前正在使用C#,我需要在一个表中插入一条新记录,获取新的主键值,然后在插入多个记录时将其用作外键引用.数据库是MS SQL Server 2003.所有帮助表示赞赏!
获取插入行的标识的方法是使用该SCOPE_IDENTITY()
函数.如果您正在使用存储过程,那么这将类似于以下内容将行标识作为输出参数返回.
CREATE PROCEDURE dbo.MyProcedure ( @RowId INT = NULL OUTPUT ) AS INSERT INTO MyTable ( Column1 ,Column2 ,... ) VALUES ( @Param1 ,@Param2 ,... ); SET @RowId = SCOPE_IDENTITY();
然后,您可以将此值用于任何后续插入(或者,如果您可以将数据全部传递到存储过程中,则可以在过程体的其余部分中使用它).
如果你动态地传递SQL,那么你使用相同的技术,但是使用带有语句分隔符的单个字符串(也在;
SQL中),例如:
var sql = "INSERT INTO MyTable (Column1, Column2, ...) VALUES (@P1, @P2, ...);" + "SELECT SCOPE_IDENTITY();";
然后,如果你使用你执行此操作,ExecuteScalar
你将能够将标识作为标量结果返回并将其转换为正确的类型.或者,您可以一次性构建整批产品,例如
var sql = "DECLARE @RowId INT;" + "INSERT INTO MyTable (Column1, Column2, ...) VALUES (@P1, @P2, ...);" + "SET @RowId = SCOPE_IDENTITY();" + "INSERT INTO MyOtherTable (Column1, ...) VALUES (@P3, @P4, ...);";
这可能不是完全正确的语法,你可能需要SET NOCOUNT ON;
在开始时使用(我的头脑生锈,因为我很少使用动态SQL),但它应该让你走上正确的轨道.