проверить, существует ли столбец, скопировать его и отбросить - PullRequest
0 голосов
/ 25 сентября 2019

Я хотел бы скопировать значения столбца table1 в table2 и удалить его после этого из таблицы table следующим образом

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 не работает?тот же результат с ЕСЛИ СУЩЕСТВУЕТ команда

1 Ответ

1 голос
/ 25 сентября 2019

Сбой со второй попытки, потому что вы сбросили 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...