在MS SQL中生成唯一值

时间:2014-12-02 09:09:28

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

我有主键唯一列ID nchar(10)。我打算用它来生成数字ID。增量订单没问题,但没有必要。如何为此制造出最佳的发电机?我应该使用存储过程吗?也许MS SQL服务器出于这个原因有任何功能?

3 个答案:

答案 0 :(得分: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。

答案 1 :(得分:1)

对于主键列,您必须使用插入了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 |

答案 2 :(得分:0)

ID int IDENTITY (1, 1) NOT NULL PRIMARY KEY 

使用MS SQL中的IDENTITY属性和PRIMARY KEY的唯一性。

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

  • 每个新值都是根据当前种子生成的。增量。
  • 特定交易的每个新值与表中的其他并发交易不同。
  • (1,1) - 您可以拥有的初始数字和增量值。