如何为SQL Server列创建一个默认值,只插入NEWID()的最后十个字符



我有下面的DDL,我的队友执行它来添加一个新列:

ALTER TABLE [dbo].[Question] ADD GlobalId VARCHAR (50) DEFAULT(NEWID());

我现在想更改它,使默认值仅适用于生成的NEWID()的最后八个字符。有人能告诉我如何删除默认值并创建一个新的默认值吗。非常感谢。

为了给出一个想法,select substring(reverse(newid()),0,8);将产生您需要的值。

也许ALTER TABLE [dbo].[Question] ADD GlobalId VARCHAR (50) DEFAULT(substring(reverse(newid()),0,8));可以帮你。

已编辑 @Melina:我该如何删除现有的默认值并将其添加为新的默认值

  1. 您必须首先从现有的创建一个临时表。select col1,col2, ... substring(reverse(GlobalId, 0, 8)) into TEMP_T from [dbo].[Question];
  2. 删除表drop table [dbo].[Question];
  3. 创建一个包含所有现有字段但包含新alter的新表create table [dbo].[Question] (col1 type1, col2 type2 ..., GlobalId VARCHAR (8) DEFAULT(substring(reverse(newid()),0,8)));
  4. 将TEMP_T中的数据插入新创建的表

我认为你可以通过这种方式简单地完成

Declare @varNewId as nvarchar(50)
set @varNewId =( select RIGHT(NewID(),3))
ALTER TABLE [dbo].[Question] ADD GlobalId VARCHAR (50) DEFAULT(@varNewId);

最新更新