如何在t-sql中运行此命令之前添加列?

时间:2011-10-13 12:09:57

标签: 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 Company set RegistrationNumber = ''

但我得到了错误

  

列名称'RegistrationNumber'无效。

然而,当我运行第一位然后第二位我没有遇到问题....我怎么把它全部放到一个脚本中?

1 个答案:

答案 0 :(得分:2)

当解析器分析您的查询时,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 = ''

编辑:如果您希望一次性执行这两个步骤,为什么不使用新列的默认值?

BEGIN TRY
    BEGIN TRANSACTION 
        ALTER TABLE company
        ADD RegistrationNumber nvarchar(50) DEFAULT ''
    COMMIT
END TRY
BEGIN CATCH
  IF(@@trancount > 0)
    ROLLBACK TRANSACTION 
END CATCH