gpt4 book ai didi

sql - 使用 exec 命令切断动态 SQL 语句时出错

转载 作者:行者123 更新时间:2023-12-04 04:53:22 26 4
gpt4 key购买 nike

我正在尝试使用以下代码旋转具有 400 个左右唯一值的列:

       Declare @t VARCHAR(10)
Declare @A VARCHAR(1000)
Declare @B VARCHAR(1000)
set @A='SELECT Name, IRIS_ID__c'
SET @B='('
SELECT @A=@A+',['+Question_Concept_With_ImpactArea__c+'] as ['+Question_Concept_With_ImpactArea__c+']',@B=@B+'['+Question_Concept_With_ImpactArea__c+']'
FROM (SELECT DISTINCT Question_Concept_With_ImpactArea__c
FROM Company_Number_Response) cur
-- removing last ',' from both variables
SET @B=SUBSTRING(@B,1,LEN(@B)-1)
SET @A=@A+ + '
FROM
(SELECT NAME, IRIS_ID__c, Selected, Question_Concept_With_ImpactArea__c
FROM Company_Number_Response) s PIVOT (max(Unified_Response__c)
FOR Question_Concept_With_ImpactArea__c IN ' +@B+')) p ORDER BY [IRIS_ID__c];'
exec(@A);

运行此代码会引发错误“字符串 'CM_PcCOGSSup' 后的未关闭引号
“CM_PcCOGSSup”附近的语法不正确

当我将最后一个命令从 exec 更改为 print 时,我可以看到正在读取许多值,但该语句只是在上述错误中的值处中断。我检查了数据,没有看到任何会导致这种情况的字符。此外,我认为结果可能太长,并将结果的最大数量更改为文本为 8192。

任何帮助将不胜感激。

最佳答案

假设您使用的是 SQL Server 2005 或更高版本,请将变量声明更改为 varchar(max) .它正在切断,因为您只提供了 varchar(1000) , 并且字符串连接不会自动加长 char数据类型——它们被截断。

在 SQL 2000 中你只能使用 varchar(8000) .如果您需要更长的时间,您将不得不发挥创造力——这是一项非常艰巨的任务。

您还有 SET @A=@A+ + ' .如果这有效,我很惊讶,但无论如何应该只有一个 +那里。

而且,您不应该只是在列周围放置方括号以使它们成为有效的 sysname数据类型。您应该使用 QuoteName功能:

SELECT @A = @A + ',' + QuoteName(Question_Concept_With_ImpactArea__c) ...

关于sql - 使用 exec 命令切断动态 SQL 语句时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17095924/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com