Tsql 在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

我必须写一个脚本来更新一个数据库,但我做起来有问题。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 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