Sql 表alter脚本失败,因为它可以';我看不出它是什么';It’他想补充
我需要执行一个脚本,向表中添加一个新列,然后根据现有列更新该列Sql 表alter脚本失败,因为它可以';我看不出它是什么';It’他想补充,sql,sql-server,sql-server-2014,ddl,Sql,Sql Server,Sql Server 2014,Ddl,我需要执行一个脚本,向表中添加一个新列,然后根据现有列更新该列 PRINT 'Adding Column to Table...' ALTER TABLE dbo.Table ADD [Column] DATETIME2 NULL; PRINT 'Updating data...' UPDATE dbo.Table SET [column] = ISNULL([ModifiedDate],[CreatedDate]) PRINT 'Finalising table structure..
PRINT 'Adding Column to Table...'
ALTER TABLE dbo.Table
ADD [Column] DATETIME2 NULL;
PRINT 'Updating data...'
UPDATE dbo.Table
SET [column] = ISNULL([ModifiedDate],[CreatedDate])
PRINT 'Finalising table structure...'
ALTER TABLE dbo.Table
ALTER COLUMN [Column] DATETIME2 NOT NULL
PRINT 'Complete!'
然而,当我一次性执行它时,它会在更新时出错,说“Column”不存在
如果我一次运行一行,它就会工作
有没有办法绕过这个问题
我可以通过使用EXEC来进行更新来绕过这个问题,但这似乎有点骇人听闻。这是唯一的选项吗?问题是当编译
更新时,该列不知道。我想你可以通过在不同的命令之间插入GO
来解决这个问题
但是,为什么不使用计算列:
ALTER TABLE dbo.Table ADD [Column] AS COALESCE([ModifiedDate],[CreatedDate]) ;
对于计算列,您不需要进行更新,而且值总是正确的。问题在于编译更新时,该列不知道。我想你可以通过在不同的命令之间插入GO
来解决这个问题
但是,为什么不使用计算列:
ALTER TABLE dbo.Table ADD [Column] AS COALESCE([ModifiedDate],[CreatedDate]) ;
对于计算列,您不需要进行更新,而且值总是正确的。我也这样认为,正如@Gordon所说,您可以通过使用中间语句来解决这个问题,如下所示:
PRINT 'Adding Column to Table...'
ALTER TABLE dbo.[Table] ADD [Column] DATETIME2 NULL;
GO
PRINT 'Updating data...'
UPDATE dbo.[Table]
SET [column] = ISNULL([ModifiedDate],[CreatedDate])
GO
PRINT 'Finalising table structure...'
ALTER TABLE dbo.[Table]
ALTER COLUMN [Column] DATETIME2 NOT NULL
PRINT 'Complete!'
你能试试这个密码吗。我将表名括在方括号中,它是一个保留关键字,因此无法在SQL2012中执行,并且它一直在我的末尾运行。我也这样认为,正如@Gordon所说的,您可以通过使用GO-between语句来解决这个问题,如下所示:
PRINT 'Adding Column to Table...'
ALTER TABLE dbo.[Table] ADD [Column] DATETIME2 NULL;
GO
PRINT 'Updating data...'
UPDATE dbo.[Table]
SET [column] = ISNULL([ModifiedDate],[CreatedDate])
GO
PRINT 'Finalising table structure...'
ALTER TABLE dbo.[Table]
ALTER COLUMN [Column] DATETIME2 NOT NULL
PRINT 'Complete!'
你能试试这个密码吗。我已经将表名括在方括号中,它是一个保留关键字,因此无法在SQL2012中执行,并且它一直在工作到我结束。这将是一个好主意。问题是,更改是由错误引起的。ModifiedDate和CreatedDate是审计字段,不打算由应用程序使用,因此我们需要一个单独的“业务价值”列。这是个好主意。问题是,更改是由错误引起的。ModifiedDate和CreatedDate是审计字段,不打算由应用程序使用,因此我们需要一个单独的“业务价值”列。