Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在nvarchar声明中省略大小有什么影响_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 在nvarchar声明中省略大小有什么影响

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。请参见: 要查看此操作

我通常在SP中声明参数时定义大小,如:

@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。