我需要输出不同数量的列,具体取决于不同列中某些变量的值。最基本的说,我必须输出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可以按预期工作,并且我得到的预期结果集没有任何错误。我知道我可以减少别名中的字符数,但是我只是在解决该问题而不了解它。任何指针,我将不胜感激。
答案 0 :(得分:0)
我想问题出在与@MyVar
变量的串联中。
即使@Result
是VARCHAR(MAX)
,连接的字符串也不是。因此,串联的结果是将“小”截断的VARCHAR
存储到“大”中,但无用的VARCHAR(MAX)
。
因此,您应该为串联的每个部分定义VARCHAR(MAX)
变量,然后分配给@Result