然后选择scope_identity()生成重复的行

时间:2011-04-20 21:00:37

标签: sql-server database

CREATE TABLE [schema].[table] (
  [column1] int IDENTITY NOT NULL,
  [column2] int NULL,
  [column3] int NULL,
  PRIMARY KEY CLUSTERED ([column1])
);
INSERT INTO schema.table (column2,column3) VALUES (1,1);
SELECT scope_identity();

它插入两个相同的行,并返回第二个插入行的主键。

这可能是一个非常基本的原因,但谷歌不是我的朋友。

1 个答案:

答案 0 :(得分:5)

请逐字复制并粘贴

SET NOCOUNT ON;
USE tempdb;
CREATE TABLE dbo.[table] (
  [column1] int IDENTITY NOT NULL,
  [column2] int NULL,
  [column3] int NULL,
  PRIMARY KEY CLUSTERED ([column1])
);
INSERT INTO dbo.[table] (column2,column3) VALUES (1,1);
SELECT scope_identity();

SELECT * FROM dbo.[table]

你应该

---------------------------------------
1

column1     column2     column3
----------- ----------- -----------
1           1           1

如果有疑问,请始终在tempdb中尝试一个干净的新表。

其他说明:

  • 如果您正在从ASP.Net运行插入,请检查您是否有空白的CSS元素(背景图像链接),它会导致对同一页面的第二个请求
  • 如果您只是在SSMS或类似工具中运行普通INSERT,请检查触发器

使用TSQL查找针对表的触发器

select name, OBJECT_NAME(parent_object_id)
from sys.objects
where type='TR'
and OBJECT_NAME(parent_object_id) = 'table'  -- or whatever the table name is

使用TSQL

查看触发器(或任何模块)的文本
select definition
from sys.sql_modules
where object_id = object_id('tg_table')  -- or whatever the trigger is named