Zer*_*oth 4 c# sql-server autonumber
我目前正在使用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();
Run Code Online (Sandbox Code Playgroud)
然后,您可以将此值用于任何后续插入(或者,如果您可以将数据全部传递到存储过程中,则可以在过程体的其余部分中使用它).
如果你动态地传递SQL,那么你使用相同的技术,但是使用带有语句分隔符的单个字符串(也在;SQL中),例如:
var sql = "INSERT INTO MyTable (Column1, Column2, ...) VALUES (@P1, @P2, ...);" +
"SELECT SCOPE_IDENTITY();";
Run Code Online (Sandbox Code Playgroud)
然后,如果你使用你执行此操作,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, ...);";
Run Code Online (Sandbox Code Playgroud)
这可能不是完全正确的语法,你可能需要SET NOCOUNT ON;在开始时使用(我的头脑生锈,因为我很少使用动态SQL),但它应该让你走上正确的轨道.
| 归档时间: |
|
| 查看次数: |
15952 次 |
| 最近记录: |