2010-03-12 76 views
2

我想插入数据到表中,我不知道我需要的下一个唯一键。我不知道如何格式化我的INSERT查询,以使Key字段的值大于表中键的最大值。我知道这是一个破解,但我只是对数据库运行一个快速测试,并且需要确保我总是发送一个Unique密钥。如何将唯一键插入表中?

这里的SQL我到目前为止:

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

哪些错误出具有:

消息1046,级别15,状态1,行5个 子查询在这种情况下是不允许的。只有标量表达式是允许的。

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

回答

3

可以使用其他INSERT语法:

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

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

+0

如果一条记录在中间被删除会发生什么? – manas 2012-11-16 10:02:03

+1

@silent_warrior:什么都没有。该删除的ID将保持未使用状态。当您使用IDENTITY列从表的中间删除一行时,会发生同样的情况。 – 2012-11-16 18:36:28

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

但为什么KEYFLD不使用IDENTITY属性,然后要么SCOPE_IDENTITY()或输出的条款? (OK,没有架构更改无赖。)

+0

+1:你是第一个 – 2010-03-12 20:39:57

相关问题