【发布时间】:2019-02-01 05:00:13
【问题描述】:
当我在兼容级别为 130 的 SQL Server 2016 数据库上运行此 T-SQL 时,出现错误:
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 这样的神奇 函数,它要求第一个参数是字符串文字(不允许使用表达式),但@987654329 的文档@ 没有提到对@value 参数的任何限制:
[ @value= ] { 'value'}是要与属性关联的值。值为
sql_variant,默认为NULL。 value 的大小不能超过 7,500 字节。
【问题讨论】:
-
T-SQL 是一种粗鲁的语言,它常常让人们惊讶于某些特性之间缺乏正交性(这里,表达式不能用在变量或文字可以使用的所有地方)
标签: sql-server extended-properties