如何在sql server中连接字符串

Nam*_*man 0 t-sql sql-server

我试图连接字符串但它似乎不起作用.有人可以告诉我下面的代码有什么问题吗?

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'.

Mar*_*son 7

根据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)