我试图连接字符串但它似乎不起作用.有人可以告诉我下面的代码有什么问题吗?
declare @x varchar = 'a';
SET @x += 's'
SET @x = @x + 'z'
SET @x = concat('x','y')
SELECT @x;
Run Code Online (Sandbox Code Playgroud)
上述方法均无效.我输出为'x'.
根据Aaron Bertrand的文章:
https://sqlblog.org/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length
......你不应该在VARCHAR没有长度的情况下宣布.
问题是,如果您没有定义长度,SQL Server将为您分配一个长度,它可能没有您期望的那么宽.在某些情况下,它将是1(是的,这是第一,而不是拼写错误),在其他情况下,它将是30.
该文档是在这个非常清楚,以及:
varchar [(n | max)]
如果未在数据定义或变量声明语句中指定n,则默认长度为1.使用CAST和CONVERT函数时未指定n时,默认长度为30.
这样可以正常工作:
declare @x varchar(10) = 'a';
SET @x += 's'
SET @x = @x + 'z'
SET @x = concat('x','y')
SELECT @x;
Run Code Online (Sandbox Code Playgroud)