Sql 在nvarchar声明中省略大小有什么影响
我通常在SP中声明参数时定义大小,如:Sql 在nvarchar声明中省略大小有什么影响,sql,sql-server,tsql,Sql,Sql Server,Tsql,我通常在SP中声明参数时定义大小,如: @myParam nvarchar(size) 或者当我铸造或转换时: CAST(@myParam AS nvarchar(size)) 最近,我从CAST函数中删除了大小,如: CAST(@myParam AS nvarchar) 我有点担心这会不会在最意想不到的时候咬到我:-(,因为我注意到在使用递归CTE和在不指定大小的情况下转换nvarchar时,nvarchar变量会被截断 有任何注释吗?如果省略大小,则默认为30。请参见: 要查看此操作
@myParam nvarchar(size)
或者当我铸造或转换时:
CAST(@myParam AS nvarchar(size))
最近,我从CAST函数中删除了大小,如:
CAST(@myParam AS nvarchar)
我有点担心这会不会在最意想不到的时候咬到我:-(,因为我注意到在使用递归CTE和在不指定大小的情况下转换nvarchar时,nvarchar变量会被截断
有任何注释吗?如果省略大小,则默认为30。请参见: 要查看此操作,请尝试执行以下语句:
——输出:123456789001234567890.098765432
选择强制转换(12345678901234567890.098765432作为nvarchar)
--抛出“将表达式转换为数据类型nvarchar时出现算术溢出错误。”
选择强制转换(12345678901234567890.0987654321作为nvarchar)
--输出:12345678901234567890.0987654321
选择铸造(12345678901234567890.0987654321作为nvarchar(31))
根据@krul的注释;30是CAST的默认长度;但是数据定义或变量声明的默认长度是1
注意:还有一个函数可以将数字字段转换为字符串,默认长度为10
--outputs: 1234567890
select str(1234567890)
--outputs: **********
select str(12345678901)
--outputs: 12345678901
select str(12345678901,11)
它会将大小设置为默认大小,并截断其余的大小。除非默认大小合适,否则这很可能会影响您
因此,我建议您始终指定大小,以明确您认为的大小,而不是让下一个阅读代码的人来询问nvarchar的默认大小;)。非常感谢,这就清楚了:当数据定义或变量声明语句中没有指定n时,默认长度为1。如果未使用CAST函数指定n,则默认长度为30。