Ниже приведен фрагмент SQL-запроса, который я использую для обновления таблицы до нужных типов данных.ALTER TABLE Выполнение независимо от результатов оценки состояния
If NOT Exists(Select * From Information_Schema.Columns
Where Table_Name = N'RXINFO'
And Table_Schema = N'scriptassist'
And Column_Name = N'LastChanged'
And DATA_Type = N'TIMESTAMP'
AND IsNull(CHARACTER_MAXIMUM_LENGTH, 0) = 0)
BEGIN
Print 'LastChanged Field needed type updating'
Alter Table [scriptassist].[RXINFO] Alter Column LastChanged TIMESTAMP
END
В настоящее время проблема заключается в следующем:
Если я запускаю заявление с Alter Table присутствует SQL Server выдает эту ошибку у меня.
Msg 4927, Level 16, State 1, Line 12 Невозможно изменить столбец 'последнего изменения', чтобы быть типом данных метки времени.
Проблема не в том, что она не может изменить тип данных, проблема в том, что она пытается выполнить этот блок кода независимо от оценки условия. В этом случае он должен быть равен False.
Если я его вынимаю, ничего не происходит, заявление печати даже не срабатывает.
Единственное, о чем я могу думать до сих пор, заключается в том, что каким-то образом MS SQL предварительно оценивает SQL и определяет, могут ли все пути кода выполняться, и поскольку они не могут это порождать ошибку. Однако это не имеет большого смысла.
У меня нет ошибки при запуске того же кода на SQL Server 2008 R2. Вы сказали, что * должны * оценивать значение false. Вы выбрали критерии выбора, чтобы убедиться, что он возвращает результат? –
@mootinator, да, я сделал. – msarchet