use*_*516 4 sql sql-server sql-server-2005 alter-table
我对SQL很新,所以不确定这是否只是一个SQL编译器的事情.当我在通过JAVA或PHP之前使用SQL时,从不直接使用SQL.我正在使用SQL Server 2005并尝试向我的表添加一个列,然后填充它.这就是我现在拥有的:
ALTER TABLE House DROP COLUMN CustomerType
ALTER TABLE House ADD CustomerType char(11)
UPDATE House
SET CustomerType = CASE
WHEN ... THEN...
WHEN ... THEN...
ELSE "Other"
END
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试编译它时,错误,因为UPDATE函数中的CustomerType尚未定义.有没有办法运行它,以便它将编译并添加列并更新它,或者我必须在多次执行中运行它?
谢谢!
为每个操作使用多个文件,或在步骤之间放置"GO":
ALTER TABLE House DROP COLUMN CustomerType
GO
ALTER TABLE House ADD CustomerType char(11)
GO
UPDATE House
SET CustomerType = CASE
WHEN ... THEN...
WHEN ... THEN...
ELSE "Other"
END
GO
Run Code Online (Sandbox Code Playgroud)
这适用于SQL Server Management Studio - 它不是T-SQL功能,而是Mgmt Studio的一项功能,用于分离SQL命令的T-SQL"批处理".
更新:如果你想让你的脚本可以运行多次,那么更有用的方法是检查列的存在,并且只有在它不存在的情况下才添加它 - 没有必要总是丢弃和重新 - 添加它,如果它已经存在!
为此,请使用以下内容:
IF NOT EXISTS(SELECT * FROM sys.columns WHERE name = 'CustomerType'
AND object_id = OBJECT_ID('House'))
ALTER TABLE dbo.House ADD CustomerType CHAR(11)
GO
Run Code Online (Sandbox Code Playgroud)
这段代码检查SQL目录视图sys.columns以查看该表中是否已存在该列 - 如果不存在,则创建该列.当您对表运行此代码一千次时,第一次创建列,并且任何后续运行都不会执行任何操作 - 因为该列已存在.比不断下降和重新添加色谱柱更清洁!