EXEC函数会截断要执行的字符串变量

时间:2019-08-27 11:27:15

标签: tsql dynamic-sql

我需要输出不同数量的列,具体取决于不同列中某些变量的值。最基本的说,我必须输出X列数或X + 1

我已经创建了一个存储的proc,将X + 1列设置为变量,并将最终结果设置为字符串变量,如下面的代码所示(出于说明目的)。

创建PROC MyProc.dynamicProc AS

开始

DECLARE 
@myVar          VARCHAR(75)

SELECT  @myVar = myVar FROM myTaBLE
.
.
.
.
DECLARE @RESULT VARCHAR(MAX)

SET  @RESULT = 'SELECT  
                    COL1,
                    COL2,
                    .
                    .
                    .
                    COLN'+
                    @myVar+
                    'COLN+1,
                    .
                    .
                    COLN+X
FROM                #SOMEtABLE

ORDER BY            COL1,
                    COL2'


EXECUTE (@finalSelect)

END; 开始

当我打印@finalSelect时,我看到字符串在“ ORDER BY CO”处被截断了。 @finalSelect的长度在4800到4820之间变化,具体取决于@myVar的值。这是任何人以前必须处理的事情吗?当我减少列数时,存储的proc可以按预期工作,并且我得到的预期结果集没有任何错误。我知道我可以减少别名中的字符数,但是我只是在解决该问题而不了解它。任何指针,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

我想问题出在与@MyVar变量的串联中。
即使@ResultVARCHAR(MAX),连接的字符串也不是。因此,串联的结果是将“小”截断的VARCHAR存储到“大”中,但无用的VARCHAR(MAX)
因此,您应该为串联的每个部分定义VARCHAR(MAX)变量,然后分配给@Result