Ниже приведена выдержка из SQL-запроса, который я использую для обновления таблицы, если необходимо, для правильных типов данных.
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
В настоящее время проблема заключается в следующем:
Если я запускаю оператор с существующей таблицей изменения, SQL Server выдает мне эту ошибку.
Сообщение 4927, уровень 16, состояние 1, строка 12
Невозможно изменить столбец «LastChanged» как метку времени типа данных.
Проблема не в том, что он не может изменить тип данных, а в том, что он пытается выполнить этот блок кода независимо от оценки условия.
В этом случае следует оценить значение False.
Если я достану его, ничего не произойдет, оператор печати даже не сработает.
Единственное, о чем я могу думать до сих пор, это то, что каким-то образом MS SQL предварительно оценивает SQL и определяет, могут ли выполняться все пути кода, и, поскольку они не могут этого сделать, выдает ошибку. Однако это не имеет особого смысла.