为什么字符串变量只存储第一个符号?

时间:2015-04-23 19:18:02

标签: sql sql-server

有谁能告诉我为什么LikeString变量总是%?这是代码:

DECLARE @LikeString NVARCHAR = CAST('%4075%' AS nvarchar)
SELECT @LikeString

我已在SQL Server 2008 R2和SQL Server 2012中尝试过此操作,但@LikeString始终包含%而不是%4075%

3 个答案:

答案 0 :(得分:2)

代表charvarcharncharnvarchar

  

如果在变量声明语句中未指定大小,则默认长度为1

DECLARE @LikeString NVARCHAR(6) = CAST('%4075%' AS nvarchar(6))
SELECT @LikeString

或更简单:

DECLARE @LikeString NVARCHAR(6) = N'%4075%'
SELECT @LikeString

答案 1 :(得分:1)

从SQL Server 2008 R2 Transact-SQL文档...

“如果未在数据定义或变量声明语句中指定n,则默认长度为1.如果未使用CAST函数指定n,则默认长度为30.”

https://msdn.microsoft.com/en-us/library/ms186939(v=sql.105).aspx

您正在使用变量声明语句,因此当您尝试使用“%4075%”初始化变量时,除字符串之外的所有字符都将被截断。

因此,正如其他人所说,解决方案是指定nvarchar数据类型变量的长度。

答案 2 :(得分:0)

使用此:

DECLARE @LikeString NVARCHAR(50) = CAST('%4075%' AS nvarchar(50))
SELECT @LikeString