📄 subject_35730.htm
字号:
<p>
序号:35730 发表者:木一 发表日期:2003-04-09 03:09:51
<br>主题:SQLServer编程中的一个小问题
<br>内容:我想在向一个表中插入一行记录之后,立即返回其PKID(PKID是自动增一的)<BR>怎么做呢?<BR><BR><BR>下面是一个样例,我不明白后面<BR> SELECT @PKId = @@IDENTITY<BR>的意思。<BR><BR>本意是想找回新的PKID 值吗?<BR><BR><BR><BR>--------------------------------------------------<BR>-- InsertCustomer<BR>--------------------------------------------------<BR>ALTER PROCEDURE InsertCustomer<BR> @PKId INT = NULL OUTPUT,<BR> @Email NVARCHAR(50) = NULL,<BR> @Password NVARCHAR(15) = NULL,<BR> @Name NVARCHAR(40) = NULL,<BR> @Address NVARCHAR(255) = NULL,<BR> @Country NVARCHAR(40) = NULL,<BR> @PhoneNumber NVARCHAR(30) = NULL,<BR> @Fax NVARCHAR(30) = NULL<BR>AS<BR> SET XACT_ABORT ON<BR><BR> BEGIN TRANSACTION<BR> -- Insert Values into the customer table<BR> INSERT Customers (Email, <BR> Password,<BR> Name)<BR><BR> SELECT @Email,<BR> @Password,<BR> @Name<BR><BR> -- Get the new Customer Identifier, return as OUTPUT param<BR> SELECT @PKId = @@IDENTITY<BR><BR> COMMIT TRANSACTION<BR><BR> RETURN 0<BR>--------------------------------------------------<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:阿志 回复日期:2003-04-09 06:58:10
<br>内容:你说得对<BR><BR> Transact-SQL 参考 <BR><BR> <BR>@@IDENTITY<BR>返回最后插入的标识值。<BR><BR>语法<BR>@@IDENTITY<BR><BR>返回类型<BR>numeric<BR><BR>注释<BR>在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含此语句产生的最后的标识值。若此语句没有影响任何有标识列的表,则 @@IDENTITY 返回 NULL。若插入了多个行,则会产生多个标识值,@@IDENTITY 返回最后产生的标识值。如果此语句激发一个或多个执行产生标识值的插入操作的触发器,则语句执行后立即调用 @@IDENTITY 将返回由触发器产生的最后的标识值。若 INSERT 或 SELECT INTO 语句失败或大容量复制失败,或事务被回滚,则 @@IDENTITY 值不会还原为以前的设置。<BR><BR>在返回插入到表的 @@IDENTITY 列的最后一个值方面,@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 函数类似。 <BR><BR>@@IDENTITY 和 SCOPE_IDENTITY 将返回在当前会话的所有表中生成的最后一个标识值。但是,SCOPE_IDENTITY 只在当前作用域内返回值,而 @@IDENTITY 不限于特定的作用域。<BR><BR>IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回任何会话和任何作用域中为特定表生成的标识值。有关更多信息,请参见 IDENT_CURRENT。<BR><BR>示例<BR>下面的示例向带有标识列的表中插入一行,并用 @@IDENTITY 显示在新行中使用的标识值。<BR><BR>INSERT INTO jobs (job_desc,min_lvl,max_lvl)<BR>VALUES ('Accountant',12,125)<BR>SELECT @@IDENTITY AS 'Identity'<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -