测试列是否存在并将其复制并删除

时间:2019-09-25 17:58:32

标签: sql sql-server

我想像这样将table1的列值复制到table2并将其从table1中删除

IF COL_LENGTH('table1', 'coltocopy') IS NOT NULL
BEGIN
    INSERT INTO table2 (coltoreceive)
    select coltocopy from table1
    ALTER TABLE table1
    DROP COLUMN coltocopy
END
ELSE
print 'no action'

第一次没关系,但是如果再次运行此脚本,我会遇到类似的错误

Invalid column name 'coltocopy'.

IF COL_LENGTH('table1','coltocopy')NOT NULL不起作用吗? 与 IF EXISTS 命令相同的结果

1 个答案:

答案 0 :(得分:1)

第二次尝试失败,因为您在第一次尝试中放弃了coltocopy,这意味着SELECT coltocopy FROM table1不再是有效的语句。没关系,如果coltocopy不存在,脚本实际上不会达到该点,引擎仍将检查整个脚本并对其进行错误处理。我相信您需要动态sql来避免该错误。

尝试一下:

DECLARE @SQL varchar(max) = 'INSERT INTO table2 (coltoreceive)
                             select coltocopy from table1
                             ALTER TABLE table1
                             DROP COLUMN coltocopy'

IF COL_LENGTH('table1', 'coltocopy') IS NOT NULL
BEGIN
    EXEC (@SQL)
END
ELSE
PRINT 'no action'