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是审计字段,不打算由应用程序使用,因此我们需要一个单独的“业务价值”列。