【问题标题】:Generate unique value in MS SQL在 MS SQL 中生成唯一值
【发布时间】:2015-01-30 11:22:12
【问题描述】:

我有主键唯一列 ID nchar(10)。我打算在其中生成数字 ID。增量顺序是可以的,但不是必需的。为此如何制作最佳发电机?我应该使用存储过程吗?也许 MS SQL server 有这个原因?

【问题讨论】:

  • 您可以将其设为 IDENTITY 列,用于连续编号。
  • 为什么你使用 nchar(10) 你应该在同一列上使用带有 PRIMARY KEY 和 IDENTITY 属性的 INT。
  • 为什么使用 nchar 作为数字 ID?这就像“好吧,让我尝试最糟糕、最慢和最有问题的解决方案,因为我真的希望看起来我从未读过数据类型”。

标签: sql sql-server sql-server-2008 random primary-key


【解决方案1】:

将 PkStudentid 声明为 INT

CREATE TABLE Student 
(
 Studentid int IDENTITY (1, 1) NOT NULL PRIMARY KEY,
 Firstname nvarchar (200) NULL,
 Lastname nvarchar (200),
 Email nvarchar (100) NULL
)

insert into Student (Firstname,Lastname,Email)
Values('Vivek', 'Johari', ‘vivekjohari@abc.com');

SET @PkStudentid  = SCOPE_IDENTITY();

print @PkStudentid

这将插入 Studentid 作为 1 和下一个条目 2 并按递增顺序。

您需要在 SQL Server 中使用IDENTITY property

已编辑:在 SQL Server 中使用 SCOPE_IDENTITY 来取回最新插入的 Studentid。

【讨论】:

  • 好的,这很好,这正是我所需要的。但我需要在插入过程中获取这个唯一 ID
  • @vico 你打算在某处使用最新插入的 Studentid 吗?
  • 不,我需要把它恢复到我的程序中
【解决方案2】:

对于主键列,您应该使用带有 IDENTITY 插入的 INT 列。

替代解决方案:

如果您不想使用 INT 数据类型,那么替代解决方案是创建具有默认值 LEFT(NEWID(), 10) 的列,并在其上使用 UNIQUE/PRIMARY KEY。因为NEWID()函数每次都会产生不同的随机字符串。

例如:

SELECT LEFT(REPLACE(NEWID(),'-',''),(10))

上面的查询会给出不同的随机字符串。

查看SQL FIDDLE DEMO

输出

|         ID | NAME |
|------------|------|
| 482E5D4850 |  pqr |
| 70369ED157 |  abc |
| 768CC98442 |  xyz |

【讨论】:

    【解决方案3】:
    ID int IDENTITY (1, 1) NOT NULL PRIMARY KEY 
    

    在 MS SQL 中使用 IDENTITY 属性和 PRIMARY KEY 以获得唯一性。

    Identity 列可用于生成键值。列上的标识属性保证以下内容:

    • 每个新值都是根据当前的种子和增量生成的。
    • 特定事务的每个新值都不同于表上的其他并发事务。
    • (1,1) - 初始数字和增量值,您可以随心所欲。

    【讨论】:

      猜你喜欢
      • 2017-04-23
      • 1970-01-01
      • 2020-09-09
      • 2012-02-01
      • 2013-06-11
      • 1970-01-01
      • 2020-12-04
      • 2018-09-05
      • 1970-01-01
      相关资源
      最近更新 更多