如何将唯一键插入表中?

发布于 2024-08-24 18:39:44 字数 539 浏览 5 评论 0原文

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

这是我到目前为止的 SQL:

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

错误如下:

消息 1046,级别 15,状态 1,第 5 行 在这种情况下不允许使用子查询。仅允许使用标量表达式。

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

I want to insert data into a table where I don't know the next unique key that I need. I'm not sure how to format my INSERT query so that the value of the Key field is 1 greater than the maximum value for the key in the table. I know this is a hack, but I'm just running a quick test against a database and need to make sure I always send over a Unique key.

Here's the SQL I have so far:

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

which errors out with:

Msg 1046, Level 15, State 1, Line 5
Subqueries are not allowed in this context. Only scalar expressions are allowed.

I'm not able to modify the underlying database table. What do I need to do to ensure a unique insert in my INSERT SQL code?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

陌若浮生 2024-08-31 18:39:44

您可以使用其他 INSERT 语法:

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

抱歉,您无法修改数据库。你说得对;这是一个黑客行为。

You can use the other INSERT syntax:

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

Sorry you can't modify the database. You're right; this is a hack.

南冥有猫 2024-08-31 18:39:44
INSERT INTO [CMS2000].[dbo].[aDataTypesTest]
           ([KeyFld]
           ,[Int1])
SELECT Max([KeyFld]) + 1, 1 FROM [dbo].[aDataTypesTest]

但是为什么不在 KeyFld 上使用 IDENTITY 属性,然后使用 SCOPE_IDENTITY() 或 OUTPUT 子句? (好吧,没有架构更改。真糟糕)

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

But why not use an IDENTITY property on KeyFld and then either SCOPE_IDENTITY() or an OUTPUT clause? (OK, no schema changes. Bummer)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文