43

是否可以在 sql server 中使用存储过程在插入一些值的表中返回标识列值?例如,如果我们在表中插入数据,则使用存储过程:

表 TBL

  • UserID 整数,身份,自动递增
  • 名称 varchar
  • 用户名 varchar
  • 密码 varchar

因此,如果我运行存储过程插入一些值,例如:

 Insert into TBL (Name, UserName, Password)
 Values ('example', 'example', '$2a$12$00WFrz3dOfLaIgpTYRJ9CeuB6VicjLGhLset8WtFrzvtpRekcP1lq')

如何返回UserID将发生此插入的值。我需要其他一些操作的 UserID 的值,有人可以解决这个问题吗?

4

7 回答 7

85
Insert into TBL (Name, UserName, Password) Output Inserted.IdentityColumnName
 Values ('example', 'example', 'example')
于 2013-08-01T12:10:42.710 回答
13

发送一个输出参数,如

@newId int output

在最终使用

    select @newId = Scope_Identity() 

     return @newId 
于 2013-08-01T12:10:36.773 回答
8
SELECT SCOPE_IDENTITY()

在插入语句之后

请参考以下链接

http://msdn.microsoft.com/en-us/library/ms190315.aspx

于 2013-08-01T12:12:11.580 回答
5

您可以使用 SqlServer 的 OUTPUT 子句显式取回标识列:假设您有一个名为 ID 的标识/自动增量列:

$sql='INSERT INTO [xyz].[myTable] (Field1, Field2, Field3) OUTPUT Inserted.ID VALUES  (1, 2, '3')';

请注意,在 Perl DBI 中,您将执行 INSERT 语句,就像它是 SELECT 一样。并像 SELECT 一样捕获输出

$sth->execute($sql);
@row=$sth->fetchrow_array; #Only 1 val in 1 row returned
print "Inserted ID: ", $row[0], "\n";

大概这是更可取的,因为它不需要另一个请求。

于 2014-11-13T20:51:15.867 回答
4

这里有很多不同的方法来获取 ID,包括 Scope_Identity:

https://stackoverflow.com/a/42655/1504882

于 2013-08-01T12:10:34.620 回答
1

您可以使用Scope_Identity()来获取最后一个值。

也读一读这些:

于 2013-08-01T12:08:18.703 回答
-2

您也可以使用 SELECT @@IDENTITY

于 2013-08-01T12:10:39.400 回答