我想将数据插入到一个表中,我不知道下一个我需要的唯一键。我不确定如何格式化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代码中的唯一插入?
答案 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]
很抱歉,您无法修改数据库。你是对的;这是一个黑客。