如何在sql server中连接字符串

时间:2018-03-05 14:03:32

标签: sql-server tsql

我正在尝试连接字符串但它似乎不起作用。有人能告诉我下面的代码有什么问题吗?

declare @x varchar = 'a';

SET @x += 's'

SET @x = @x + 'z'

SET @x = concat('x','y')

SELECT @x;

以上方法均无效。我输出为'x'。

5 个答案:

答案 0 :(得分:7)

根据Aaron Bertrand的文章:

https://sqlblog.org/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length

...你不应该在没有长度的情况下声明VARCHAR

  

问题是,如果您没有定义长度,SQL Server将分配   一个适合你,它可能没有你想象的那么宽。在一些   场景,它将是1(是的,这是第一,而不是拼写错误),和   在其他人中,它将是30岁。

docs在这方面也很清楚:

  

varchar [(n | max)]
  在数据定义或变量声明中未指定n时   声明,默认长度为1.使用时未指定n   CAST和CONVERT函数,默认长度为30。

这样可以正常工作:

declare @x varchar(10) = 'a';

SET @x += 's'

SET @x = @x + 'z'

SET @x = concat('x','y')

SELECT @x;

答案 1 :(得分:3)

宣布varchar()时需要一个长度。否则,它只有一个字符长:

declare @x varchar(255) = 'a';

一旦变量足够大以存储值,其余代码就可以工作。

答案 2 :(得分:3)

你需要告诉sql你的varchar的长度。在大多数情况下,sql将varchar视为varchar(1)

declare @x varchar(10) = 'a';
SET @x += 's'
SET @x = @x + 'z'

SET @x = concat('x','y')

SELECT @x;

答案 3 :(得分:2)

下面的代码可以使用,记住你需要声明字符串足够长以包含结果。

declare @a varchar(100)
declare @b varchar(100)

set @a = 'This should ';
set @b = 'work';
select @a + @b

如果你有这样的短字符串:

declare @a varchar(4)
declare @b varchar(4)

set @a = 'This should ';
set @b = 'work';
select @a + @b

你最终会得到结果:

'Thiswork'

答案 4 :(得分:2)

您需要使用长度声明VARCHAR,尝试将其更改为VARCHAR(20)并查看会发生什么。

声明不带长度的VARCHAR会导致长度为1。