我有一个脚本,我在其中向表中添加一列,并在我用另一个表中的数据填充该列之后立即。我在添加的列上收到“无效的列名”错误。
错误,具体来说,是 Invalid column name 'tagID'.
BEGIN TRANSACTION和之间的代码COMMIT实际上是一个更大脚本的摘录,但这是相关的摘录(我需要所有这些才能成功或简单地回滚):
BEGIN TRY
BEGIN TRANSACTION
ALTER TABLE [Items] ADD tagID [uniqueidentifier] NULL
MERGE INTO
Items AS target
USING
Tags AS t ON t.tag = target.tag
WHEN MATCHED THEN
UPDATE SET target.tagID = t.id;
COMMIT
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION
END CATCH
GO
Run Code Online (Sandbox Code Playgroud)
SQL Server 尝试编译批处理中的所有语句。如果表不存在,则语句的编译会被推迟,但对于缺失的列没有延迟编译。
您可以使用
BEGIN TRY
BEGIN TRANSACTION
ALTER TABLE [Items] ADD tagID [uniqueidentifier] NULL
EXEC('
MERGE INTO
Items AS target
USING
Tags AS t ON t.tag = target.tag
WHEN MATCHED THEN
UPDATE SET target.tagID = t.id;
')
COMMIT
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION
END CATCH
GO
Run Code Online (Sandbox Code Playgroud)
将列的使用推送到创建列后编译的子批次中。它仍然属于在父作用域中打开的同一个事务。
| 归档时间: |
|
| 查看次数: |
2038 次 |
| 最近记录: |