w00*_*977 1 sql t-sql sql-server transactions
我执行以下代码:
use AdventureWorks2008R2
begin transaction
BEGIN
alter table HumanResources.Department add newcolumn int
update HumanResources.Department set newcolumn=1 where departmentid=1
END
commit
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
列名称"newcolumn"无效.
可以ALTER在这样的交易中包含语句吗?如果是这样,我该如何防止此错误?
我在网上研究了这个,例如这里.我没有找到我的具体问题的答案.
是的,您可以ALTER在交易中包含一个.问题是解析器验证UPDATE语句的语法,并且不能"看到"您也在执行ALTER.一种解决方法是使用动态SQL,以便解析器不会检查您的语法(并验证列名称),直到运行时ALTER已经发生的情况:
BEGIN TRANSACTION;
ALTER TABLE HumanResources.Department ADD newcolumn INT;
EXEC sp_executesql N'UPDATE HumanResources.Department
SET newcolumn = 1 WHERE DepartmentID = 1;';
COMMIT TRANSACTION;
Run Code Online (Sandbox Code Playgroud)
请注意,缩进使代码块更容易识别(并且您的BEGIN/END多余).