Я случайно использовал несколько функций T-SQL в SQL Server 2008 в сценарии, содержащем функцию, которая будет развернута в многочисленных клиентских базах данных, некоторые из которых будут SQL 2005.
Пример оскорбительного высказывания:
create function dbo.fnThisWontWorkOnSQL2005
()
returns varchar(max)
as
begin
declare @intCounter int = 2
return @intCounter
end
select dbo.fnThisWontWorkOnSQL2005()
В экземпляре SQL2008 возвращается 2.
В экземпляре SQL2005 это советует "Невозможно назначить значение по умолчанию локальной переменной."
Однако в базе данных SQL 2005, установленной уровнем совместимости, работающей на экземпляре SQL2008 R2, код выполняется успешно и возвращает 2.
Моя проблема возникает при разработке экземпляра SQL2008R2, и я предполагал, что установка уровня совместимости целевой базы данных на SQL Server 2005 пометит любой недопустимый T-SQL, хотя этого НЕ происходит, или, по крайней мере, я могу не найти ничего, чтобы предотвратить это.
Кто-нибудь знает, как предотвратить это? Я искал по-разному, но не могу найти способ, и мне кажется, что это ошибка, или мне всегда нужно разрабатывать самую низкую версию SQL, на которую я буду развертывать?