我有下面的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:我该如何删除现有的默认值并将其添加为新的默认值
- 您必须首先从现有的创建一个临时表。
select col1,col2, ... substring(reverse(GlobalId, 0, 8)) into TEMP_T from [dbo].[Question];
- 删除表
drop table [dbo].[Question];
- 创建一个包含所有现有字段但包含新alter的新表
create table [dbo].[Question] (col1 type1, col2 type2 ..., GlobalId VARCHAR (8) DEFAULT(substring(reverse(newid()),0,8)));
- 将TEMP_T中的数据插入新创建的表
我认为你可以通过这种方式简单地完成
Declare @varNewId as nvarchar(50)
set @varNewId =( select RIGHT(NewID(),3))
ALTER TABLE [dbo].[Question] ADD GlobalId VARCHAR (50) DEFAULT(@varNewId);