Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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/4/webpack/2.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 server 如何在sql server中连接字符串_Sql Server_Tsql - Fatal编程技术网

Sql server 如何在sql server中连接字符串

Sql server 如何在sql server中连接字符串,sql-server,tsql,Sql Server,Tsql,我试图连接字符串,但它似乎不起作用。谁能告诉我下面的代码有什么问题吗 declare @x varchar = 'a'; SET @x += 's' SET @x = @x + 'z' SET @x = concat('x','y') SELECT @x; 上述方法都不起作用。我得到的输出是“x”。下面的代码可以工作,请记住,您需要声明足够长的字符串来包含结果 declare @a varchar(100) declare @b varchar(100) set @a = 'This

我试图连接字符串,但它似乎不起作用。谁能告诉我下面的代码有什么问题吗

declare @x varchar = 'a';

SET @x += 's'

SET @x = @x + 'z'

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

SELECT @x;

上述方法都不起作用。我得到的输出是“x”。

下面的代码可以工作,请记住,您需要声明足够长的字符串来包含结果

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'

您需要用长度声明您的VARCHAR,尝试将其更改为VARCHAR(20),然后看看会发生什么


不使用长度声明VARCHAR将导致长度为1。

在声明
VARCHAR()
时需要长度。否则,它只有一个字符长:

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

一旦变量足够大,可以存储值,剩下的代码就可以工作了。

根据Aaron Bertrand的文章:

…您不应该在没有长度的情况下声明
VARCHAR

问题是,如果不定义长度,SQL Server将分配 一个是给你的,它可能没有你想象的那么宽。在某些方面 在各种情况下,它将是1(是的,这是第一位,不是打字错误),并且 在其他国家,这将是30

这方面的问题也很清楚:

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;
declare @x varchar(10) = 'a';
SET @x += 's'
SET @x = @x + 'z'

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

SELECT @x;

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