【问题标题】:In SQL Server is it possible to create a table that has a unique Id?在 SQL Server 中是否可以创建具有唯一 ID 的表?
【发布时间】:2021-12-08 13:24:32
【问题描述】:

我的老板给我分配了一个 SQL 任务,由于我是 SQL 新手,我不知道从哪里开始。

任务:创建一个Customer 表以保存写入PopulateCustomers 存储过程中#Customer 临时表中的数据。该表还需要有一个唯一的 ID,以确保填充功能的多个实例可以同时运行。

我知道如何在 SQL 中创建表,我猜我可以查看 PopulateCustomer 存储过程以了解将在临时表 Customer 中写入哪些数据,以便为 Customer 创建列表。

但我真正苦苦思索的是数据库表的唯一 ID 的概念。我立即想到了表中每一行的主键。我的老板回答没有,我不想要求更多,以免被视为新手。

我自己尝试过用谷歌搜索,但我一直想出的是告诉我有关标识符与主键的页面。但是没有什么能告诉我一个表有自己的唯一 ID,除非它引用表中的行,每个行都有一个标识符或主键。这让我认为我没有为这个功能寻找正确的关键词。

我找到的最接近的东西就在这里。 http://sqlservercodebook.blogspot.com/2008/03/check-if-temporary-table-exists.html

在我看来,这个查询就像是在创建一个带有 id 的临时表。

CREATE TABLE #temp(id INT)

我没有粘贴任何工作查询,因为我真的很想研究自己并弄清楚这一点。我只是想确保我正在寻找正确的方向,我需要搜索什么术语以了解如何创建具有唯一 ID 的表。或者也许我误解了任务并且没有这样的事情。

【问题讨论】:

  • 听起来他们在谈论表本身的唯一实例?在这种情况下,您无需担心。存储过程的多次执行可以并行发生,并且它们各自获得自己的 #Customers 临时表副本
  • 说真的,试图假装你知道你在做什么——实际上你不知道——对你的老板自找麻烦。与他们进行对话,并弄清楚他们想要什么以及您需要学习哪些技能才能做到这一点。要求我们尝试澄清你老板的指示是疯狂的,而且很容易导致你做一些完全错误的事情。
  • 引用“the”临时表有点令人困惑,因为每个服务器进程都有自己的副本,因此无需担心“并发”,听起来有些交叉线需要解决。
  • 感谢马丁·史密斯。所以创建一个普通的表就足够了。
  • 是的 Dale K,这是有风险的,但我想尝试确定是否可以为表创建唯一 ID。

标签: sql-server database stored-procedures temp-tables


【解决方案1】:

我从你的故事中得到的是,你需要一个具有唯一 id 的表,它是自动生成的,并使用这个 id 作为主键。

这个表可以这样创建:

create table example
(
    id int identity(1,1) primary key clustered,
    other_data varchar(200)
)

这里的关键术语是:

  • 身份 - id 列自动递增
  • 主键 - 因此 SQL Server 确保此列是唯一的
  • 集群 - 此表中的所有数据都按此列进行物理组织(并使其搜索速度更快)

【讨论】:

  • 我不认为这是我问题的答案。我问是否可以创建一个具有唯一 ID 的表。就像一个表行有一个身份或主键
  • SQL Server 中的每个表的名称都是唯一的——你不能有两个表——或任何对象——同名,所以我怀疑你的要求是错误的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-05
  • 1970-01-01
  • 2017-08-08
相关资源
最近更新 更多