Sql server 使用变量值执行SQLALTERTABLE语句

Sql server 使用变量值执行SQLALTERTABLE语句,sql-server,tsql,variables,sql-update,alter-table,Sql Server,Tsql,Variables,Sql Update,Alter Table,我在数据库表中添加了一个GUID字段,我想通过创建一个GUID值并将其存储到相关字段来更新现有用户,但在使用变量时,我似乎无法执行该语句,以下是我的代码: --Declaration of Script Variables DECLARE @companyGUID UNIQUEIDENTIFIER DECLARE @companyDomain NVARCHAR(256) SET @companyGUID = NEWID() SET @companyDomain = 'DOMAIN NAME H

我在数据库表中添加了一个GUID字段,我想通过创建一个GUID值并将其存储到相关字段来更新现有用户,但在使用变量时,我似乎无法执行该语句,以下是我的代码:

--Declaration of Script Variables
DECLARE @companyGUID UNIQUEIDENTIFIER
DECLARE @companyDomain NVARCHAR(256)

SET @companyGUID = NEWID()
SET @companyDomain = 'DOMAIN NAME HERE'

--Company Table Update
ALTER TABLE Company ADD GUID UNIQUEIDENTIFIER DEFAULT @companyGUID NOT null
ALTER TABLE Company ADD HasCampaignMonitor BIT
ALTER TABLE Company ADD CampaignMonitorListID NVARCHAR(32)
ALTER TABLE Company ADD CampaignMonitorApiKey NVARCHAR(32)
ALTER TABLE Company ADD CampaignMonitorClientID NVARCHAR(32)
ALTER TABLE Company ADD CampaignMonitorIntegratorID NVARCHAR(16)
ALTER TABLE Company ADD CampaignMonitorRedirectUrl NVARCHAR(256)

UPDATE Company SET GUID = @companyGUID where CompanyID = 1
UPDATE Company SET HasCampaignMonitor = 0 where CompanyID = 1

--User Table Update
ALTER TABLE User ADD GUID UNIQUEIDENTIFIER DEFAULT @companyGUID 
ALTER TABLE User ADD DomainStub NVARCHAR(256) DEFAULT @companyDomain

--Activity Progress Table Update
ALTER TABLE ActivityProgress ADD GUID UNIQUEIDENTIFIER DEFAULT @companyGUID 

--Answer Table Update
ALTER TABLE Answer ADD GUID UNIQUEIDENTIFIER DEFAULT @companyGUID 

不能在alter语句中使用变量。默认值是可以使用任何静态值和某些函数作为默认值的约束

ALTER TABLE修改表的结构,而不是存储的数据


更改您的表(可能在GUID列中使用空值)、更新新列、使用NOT NULL约束更改列。

您真的要多次运行此脚本,并且每次运行时需要实际不同的
@companyGUID
值吗?如果没有,只需生成一次Guid,并将其逐字放入脚本中。