如何在表中插入唯一键?

时间:2010-03-12 20:34:17

标签: sql sql-server sql-server-2005 tsql identity

我想将数据插入到一个表中,我不知道下一个我需要的唯一键。我不确定如何格式化INSERT查询,以便Key字段的值比表中键的最大值大1。我知道这是一个黑客,但我只是对数据库进行快速测试,需要确保我总是发送一个唯一的密钥。

这是我到目前为止的SQL:

INSERT INTO [CMS2000].[dbo].[aDataTypesTest]
           ([KeyFld]
           ,[Int1])
     VALUES
           ((SELECT Max([KeyFld]) FROM [dbo].[aDataTypesTest]) + 1
           ,1)

出错的地方:

  

Msg 1046,Level 15,State 1,Line 5   在此上下文中不允许子查询。只允许使用标量表达式。

我无法修改基础数据库表。我需要做些什么来确保INSERT SQL代码中的唯一插入?

2 个答案:

答案 0 :(得分:3)

INSERT INTO [CMS2000].[dbo].[aDataTypesTest]
           ([KeyFld]
           ,[Int1])
SELECT Max([KeyFld]) + 1, 1 FROM [dbo].[aDataTypesTest]

但为什么不在KeyFld上使用IDENTITY属性,然后使用SCOPE_IDENTITY()或OUTPUT子句?(好的,没有架构更改.Bummer)

答案 1 :(得分:3)

您可以使用其他INSERT语法:

INSERT INTO [CMS2000].[dbo].[aDataTypesTest] 
       ([KeyFld] 
       ,[Int1]) 
SELECT Max([KeyFld]) + 1, 1 FROM [dbo].[aDataTypesTest]

很抱歉,您无法修改数据库。你是对的;这是一个黑客。