2010-03-12 70 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

相關問題