Tsql 在t-sql中运行此命令之前,如何添加列?
我必须写一个脚本来更新一个数据库,但我做起来有问题。T-Sql是Tsql 在t-sql中运行此命令之前,如何添加列?,tsql,sql-server-2008,Tsql,Sql Server 2008,我必须写一个脚本来更新一个数据库,但我做起来有问题。T-Sql是 BEGIN TRY BEGIN TRANSACTION ALTER TABLE company ADD RegistrationNumber nvarchar(50) COMMIT END TRY BEGIN CATCH IF(@@trancount > 0) ROLLBACK TRANSACTION END CATCH update Compan
BEGIN TRY
BEGIN TRANSACTION
ALTER TABLE company
ADD RegistrationNumber nvarchar(50)
COMMIT
END TRY
BEGIN CATCH
IF(@@trancount > 0)
ROLLBACK TRANSACTION
END CATCH
update Company set RegistrationNumber = ''
但是我得到了错误
列名“RegistrationNumber”无效
但是,当我先运行第一位,然后再运行第二位时,我不会遇到问题……我如何将其全部放到一个脚本中?当解析器分析您的查询时,
RegistrationNumber
字段不存在(尚未),因此它会报告错误;需要一个复杂得多的解析器才能识别您在查询的早期创建它
用GO
分隔这两个查询,它们将被单独解析/执行,这应该可以避免错误
BEGIN TRY
BEGIN TRANSACTION
ALTER TABLE company
ADD RegistrationNumber nvarchar(50)
COMMIT
END TRY
BEGIN CATCH
IF(@@trancount > 0)
ROLLBACK TRANSACTION
END CATCH
GO -- << Add this
UPDATE Company SET RegistrationNumber = ''
但是如何在一个事务中添加所有内容?如果有些事情不成功,我希望能够彻底失败work@Pete2k-事务可以跨批处理。如果这是所需的语义,您还需要删除原始查询中的
commit
。@Pete2k-我可以从您的注释中假设这只是更大的scrpt的一部分吗?如果没有出现很多错误,您也可以使用单行altertable company ADD RegistrationNumber nvarchar(50)默认值“”
替换脚本,然后一次完成所有操作。
BEGIN TRY
BEGIN TRANSACTION
ALTER TABLE company
ADD RegistrationNumber nvarchar(50) DEFAULT ''
COMMIT
END TRY
BEGIN CATCH
IF(@@trancount > 0)
ROLLBACK TRANSACTION
END CATCH