如何为SQL Server列创建默认值以仅插入NEWID()的最后十个字符?

时间:2013-12-27 03:25:38

标签: sql-server

我有以下DDL,我的小组交配执行以添加新列:

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

我现在想要更改它,以便默认值只适用于生成的NEWID()的最后八个字符。有人可以告诉我如何删除默认值并创建一个新的默认值来执行此操作。非常感谢。

2 个答案:

答案 0 :(得分:1)

只是提出一个想法,select substring(reverse(newid()),0,8);将产生您需要的价值。

可能ALTER TABLE [dbo].[Question] ADD GlobalId VARCHAR (50) DEFAULT(substring(reverse(newid()),0,8));会为你做。

<强> EDITED @Melina:我如何删除现有默认值并将其添加为新默认值?

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

答案 1 :(得分:0)

我认为你可以通过这种方式做到这一点

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