Когда я запускаю этот T-SQL в базе данных SQL Server 2016 с уровнем совместимости 130, я получаю сообщение об ошибке:
DECLARE @myVariable int = 4;
EXEC sys.sp_addextendedproperty
@name = N'MyExtendedProperty',
@value = FORMAT( @myVariable, 'd', 'en-US' ),
@level0type = N'SCHEMA', @level0name=N'dbo',
@level1type = N'TABLE' , @level1name=N'MyTable';
Ниже приведено сообщение об ошибке, и SSMS выделяет использование @myVariable
ввызов функции FORMAT
:
Сообщение 102, Уровень 15, Состояние 1, Строка 5
Неверный синтаксис рядом с '@ myVariable'
Но если я используюпромежуточная переменная, в которой SQL выполняется успешно:
DECLARE @myVariable int = 4;
DECLARE @myVariableText nvarchar(10) = FORMAT( @myVariable, 'd', 'en-US' )
EXEC sys.sp_addextendedproperty
@name = N'MyExtendedProperty',
@value = @myVariableText,
@level0type = N'SCHEMA', @level0name=N'dbo',
@level1type = N'TABLE' , @level1name=N'MyTable';
Мне было интересно, является ли FORMAT
или sp_addextendedproperty
магической функцией, подобной RAISERROR
, которая требует, чтобы первый аргумент былстроковый литерал (выражения не допускаются), но в документации для sp_addextendedproperty
не упоминаются какие-либо ограничения параметра @value
:
https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-addextendedproperty-transact-sql?view=sql-server-2017
[ @value= ] { 'value'}
Значение, которое будет связано со свойством.значение sql_variant
, по умолчанию NULL.Размер значения не может превышать 7500 байт.