尽管是 nvarchar(max),动态 SQL 仍被截断
Dynamic SQL getting cutoff despite being nvarchar(max)
declare @sql6 nvarchar(max) = ''
set @sql6 = @sql6 + ' CODE'
EXEC sp_executesql @SQL6
在任何情况下,以这种方式声明动态 SQL 会被切断吗?
一堆代码,不想贴墙,打印语句结尾是:
GROUP BY
T1.TreatmentID, T1.SamplingRandomNumber,
T1.ProductID, T1.OptimizationGroupID,
T1.CurrencyCode, C.CalculatedFromText,
T1.TreatmentOrdinal, T1.SourceCode,
T1.[IsPriorBoo
哪里应该有更多。
错误是
Incorrect syntax near ','.
查询特定部分的完整代码(在大型动态查询中)
SELECT
T1.TreatmentID,
T1.SamplingRandomNumber,
T1.ProductID,
T1.OptimizationGroupID,
T1.CurrencyCode,
C.CalculatedFromText,
CONVERT(FLOAT,COUNT(1)) CountCalculatedFromText,
T1.TreatmentOrdinal,
Sum(T1.Revenue) AS Revenue,
T1.SourceCode
'+replace(@ColumnsPB,'t.','T1.') +'
INTO
#RevenueDetailCount
FROM
#RevenueDetailCountTmp T1
INNER JOIN
#CalculatedFromText C ON T1.ProductID = C.ProductID
AND T1.OptimizationGroupID = C.OptimizationGroupID
AND T1.TreatmentOrdinal = C.TreatmentOrdinal
AND T1.SamplingRandomNumber = C.SamplingRandomNumber
GROUP BY
T1.TreatmentID,
T1.SamplingRandomNumber,
T1.ProductID,
T1.OptimizationGroupID,
T1.CurrencyCode,
C.CalculatedFromText,
T1.TreatmentOrdinal,
T1.SourceCode
'+replace(@ColumnsPB,'t.','T1.') +'
编辑:
完整打印的动态 sql
DECLARE @CalculatedFromText AS TABLE
(
CalculatedFromText varchar(100),
CalculatedFrom smallint
)
INSERT INTO @CalculatedFromText
(
CalculatedFromText,
CalculatedFrom
)
VALUES
('Control' ,1),
('Treatment' ,2),
('Dynamic' ,3)
select
TP.TreatmentID,
TP.ProductID,
TP.OptimizationGroupID,
MIN(TP.CalculatedFromText) AS CalculatedFromText,
TP.TreatmentOrdinal,
TP.SamplingRandomNumber,
TP.CurrencyCode,
TP.SourceCode
, TP.[IsPriorBooking]
INTO #CalculatedFromText
FROM #CalculatedFromTextTmp TP
GROUP BY
TP.TreatmentID,
TP.ProductID,
TP.OptimizationGroupID,
TP.TreatmentOrdinal,
TP.SamplingRandomNumber,
TP.CurrencyCode ,
TP.SourceCode
, TP.[IsPriorBooking]
SELECT
SamplingRandomNumber,
TreatmentID,
CalculatedFromText,
ProductID,
OptimizationGroupID,
CONVERT(FLOAT,COUNT(1)) AS CountCalculatedFromText,
TreatmentOrdinal,
CurrencyCode,
SourceCode
, [IsPriorBooking]
INTO #CountCalculatedFromText
FROM #CalculatedFromText
GROUP BY
SamplingRandomNumber,
TreatmentID,
CalculatedFromText,
ProductID,
OptimizationGroupID,
TreatmentOrdinal,
CurrencyCode,
SourceCode
, [IsPriorBooking]
SELECT
SamplingRandomNumber,
TreatmentID,
ProductID,
OptimizationGroupID,
SUM(CountCalculatedFromText) AS AllCalculatedFromText,
CurrencyCode,
SourceCode
, [IsPriorBooking]
INTO #AllCalculatedFromText
FROM #CountCalculatedFromText AS cps2
GROUP BY
SamplingRandomNumber,
TreatmentID,
ProductID,
OptimizationGroupID,
CurrencyCode,
SourceCode
, [IsPriorBooking]
SELECT
CPS.SamplingRandomNumber,
CPS.TreatmentID,
CPS.CalculatedFromText,
CPS.TreatmentOrdinal,
CPS.ProductID,
CPS.OptimizationGroupID,
CPS.CountCalculatedFromText,
CPS.CountCalculatedFromText/T.AllCalculatedFromText AS PercentCalculatedFromText,
CPS.CurrencyCode,
CPS.SourceCode
, CPS.[IsPriorBooking]
INTO #PercentCalculatedFromText
FROM #CountCalculatedFromText AS CPS
INNER JOIN #AllCalculatedFromText T ON
T.TreatmentID=CPS.TreatmentID AND T.ProductID = CPS.ProductID
AND T.OptimizationGroupID = CPS.OptimizationGroupID
AND T.CurrencyCode = CPS.CurrencyCode
SELECT
T.SamplingRandomNumber,
T.TreatmentID,
T.ProductID,
T.OptimizationGroupID,
T.TreatmentOrdinal,
T.CurrencyCode,
CASE WHEN T.CalculatedFromText = 2 THEN PS.CalculatedFromText + ' + CAST(T.TreatmentOrdinal AS char)
ELSE PS.CalculatedFromText END AS PricingType,
T.CalculatedFromText,
T.CountCalculatedFromText AS QuantityLooks,
T.PercentCalculatedFromText AS LooksPercentageOfTransactions,
T.SourceCode
, T.[IsPriorBooking]
INTO #CountCalculatedFromTextPivot
FROM #PercentCalculatedFromText T
INNER JOIN @CalculatedFromText AS PS ON T.CalculatedFromText = PS.CalculatedFrom
SELECT
T1.TreatmentID,
T1.ProductID,
T1.GroupCode,
T1.OptimizationGroupID,
CASE WHEN T1.CalculatedFrom = 2 THEN T1.TreatmentOrdinal ELSE 0 END AS TreatmentOrdinal,
T1.CurrencyCode,
T1.SamplingRandomNumber,
T1.Revenue Revenue,
T1.SourceCode
, T1.[IsPriorBooking]
INTO #RevenueDetailCountTmp
FROM #TreatmentDetails T1
WHERE T1.Stage=2
SELECT
T1.TreatmentID,
T1.SamplingRandomNumber,
T1.ProductID,
T1.OptimizationGroupID,
T1.CurrencyCode,
C.CalculatedFromText,
CONVERT(FLOAT,COUNT(1)) CountCalculatedFromText,
T1.TreatmentOrdinal,
Sum(T1.Revenue) AS Revenue,
T1.SourceCode
, T1.[IsPriorBooking]
INTO #RevenueDetailCount
FROM #RevenueDetailCountTmp T1
INNER JOIN #CalculatedFromText C ON T1.ProductID = C.ProductID
AND T1.OptimizationGroupID = C.OptimizationGroupID
AND T1.TreatmentOrdinal = C.TreatmentOrdinal
AND T1.SamplingRandomNumber = C.SamplingRandomNumber
GROUP BY
T1.TreatmentID,
T1.SamplingRandomNumber,
T1.ProductID,
T1.OptimizationGroupID,
T1.CurrencyCode,
C.CalculatedFromText,
T1.TreatmentOrdinal,
T1.SourceCode
, T1.[IsPriorBoo
您可能有两个问题。您参考 PRINT 语句 - 这将在 8000 个字节处停止(4000 个字符,因为您使用的是 nvarchar)。如果您想在 SSMS 中显示整个查询,您最好将其转换为 XML 以进行输出,这将为您提供一个可以在 SSMS 中单击并显示整个内容的字段。
在可见的查询的一小部分中,您实际上在 THEN 的第一部分这里有一个额外的引用,它至少破坏了查询的那一部分:
CASE WHEN T.CalculatedFromText = 2 THEN PS.CalculatedFromText + ' + CAST(T.TreatmentOrdinal AS char)
declare @sql6 nvarchar(max) = ''
set @sql6 = @sql6 + ' CODE'
EXEC sp_executesql @SQL6
在任何情况下,以这种方式声明动态 SQL 会被切断吗?
一堆代码,不想贴墙,打印语句结尾是:
GROUP BY
T1.TreatmentID, T1.SamplingRandomNumber,
T1.ProductID, T1.OptimizationGroupID,
T1.CurrencyCode, C.CalculatedFromText,
T1.TreatmentOrdinal, T1.SourceCode,
T1.[IsPriorBoo
哪里应该有更多。
错误是
Incorrect syntax near ','.
查询特定部分的完整代码(在大型动态查询中)
SELECT
T1.TreatmentID,
T1.SamplingRandomNumber,
T1.ProductID,
T1.OptimizationGroupID,
T1.CurrencyCode,
C.CalculatedFromText,
CONVERT(FLOAT,COUNT(1)) CountCalculatedFromText,
T1.TreatmentOrdinal,
Sum(T1.Revenue) AS Revenue,
T1.SourceCode
'+replace(@ColumnsPB,'t.','T1.') +'
INTO
#RevenueDetailCount
FROM
#RevenueDetailCountTmp T1
INNER JOIN
#CalculatedFromText C ON T1.ProductID = C.ProductID
AND T1.OptimizationGroupID = C.OptimizationGroupID
AND T1.TreatmentOrdinal = C.TreatmentOrdinal
AND T1.SamplingRandomNumber = C.SamplingRandomNumber
GROUP BY
T1.TreatmentID,
T1.SamplingRandomNumber,
T1.ProductID,
T1.OptimizationGroupID,
T1.CurrencyCode,
C.CalculatedFromText,
T1.TreatmentOrdinal,
T1.SourceCode
'+replace(@ColumnsPB,'t.','T1.') +'
编辑: 完整打印的动态 sql
DECLARE @CalculatedFromText AS TABLE
(
CalculatedFromText varchar(100),
CalculatedFrom smallint
)
INSERT INTO @CalculatedFromText
(
CalculatedFromText,
CalculatedFrom
)
VALUES
('Control' ,1),
('Treatment' ,2),
('Dynamic' ,3)
select
TP.TreatmentID,
TP.ProductID,
TP.OptimizationGroupID,
MIN(TP.CalculatedFromText) AS CalculatedFromText,
TP.TreatmentOrdinal,
TP.SamplingRandomNumber,
TP.CurrencyCode,
TP.SourceCode
, TP.[IsPriorBooking]
INTO #CalculatedFromText
FROM #CalculatedFromTextTmp TP
GROUP BY
TP.TreatmentID,
TP.ProductID,
TP.OptimizationGroupID,
TP.TreatmentOrdinal,
TP.SamplingRandomNumber,
TP.CurrencyCode ,
TP.SourceCode
, TP.[IsPriorBooking]
SELECT
SamplingRandomNumber,
TreatmentID,
CalculatedFromText,
ProductID,
OptimizationGroupID,
CONVERT(FLOAT,COUNT(1)) AS CountCalculatedFromText,
TreatmentOrdinal,
CurrencyCode,
SourceCode
, [IsPriorBooking]
INTO #CountCalculatedFromText
FROM #CalculatedFromText
GROUP BY
SamplingRandomNumber,
TreatmentID,
CalculatedFromText,
ProductID,
OptimizationGroupID,
TreatmentOrdinal,
CurrencyCode,
SourceCode
, [IsPriorBooking]
SELECT
SamplingRandomNumber,
TreatmentID,
ProductID,
OptimizationGroupID,
SUM(CountCalculatedFromText) AS AllCalculatedFromText,
CurrencyCode,
SourceCode
, [IsPriorBooking]
INTO #AllCalculatedFromText
FROM #CountCalculatedFromText AS cps2
GROUP BY
SamplingRandomNumber,
TreatmentID,
ProductID,
OptimizationGroupID,
CurrencyCode,
SourceCode
, [IsPriorBooking]
SELECT
CPS.SamplingRandomNumber,
CPS.TreatmentID,
CPS.CalculatedFromText,
CPS.TreatmentOrdinal,
CPS.ProductID,
CPS.OptimizationGroupID,
CPS.CountCalculatedFromText,
CPS.CountCalculatedFromText/T.AllCalculatedFromText AS PercentCalculatedFromText,
CPS.CurrencyCode,
CPS.SourceCode
, CPS.[IsPriorBooking]
INTO #PercentCalculatedFromText
FROM #CountCalculatedFromText AS CPS
INNER JOIN #AllCalculatedFromText T ON
T.TreatmentID=CPS.TreatmentID AND T.ProductID = CPS.ProductID
AND T.OptimizationGroupID = CPS.OptimizationGroupID
AND T.CurrencyCode = CPS.CurrencyCode
SELECT
T.SamplingRandomNumber,
T.TreatmentID,
T.ProductID,
T.OptimizationGroupID,
T.TreatmentOrdinal,
T.CurrencyCode,
CASE WHEN T.CalculatedFromText = 2 THEN PS.CalculatedFromText + ' + CAST(T.TreatmentOrdinal AS char)
ELSE PS.CalculatedFromText END AS PricingType,
T.CalculatedFromText,
T.CountCalculatedFromText AS QuantityLooks,
T.PercentCalculatedFromText AS LooksPercentageOfTransactions,
T.SourceCode
, T.[IsPriorBooking]
INTO #CountCalculatedFromTextPivot
FROM #PercentCalculatedFromText T
INNER JOIN @CalculatedFromText AS PS ON T.CalculatedFromText = PS.CalculatedFrom
SELECT
T1.TreatmentID,
T1.ProductID,
T1.GroupCode,
T1.OptimizationGroupID,
CASE WHEN T1.CalculatedFrom = 2 THEN T1.TreatmentOrdinal ELSE 0 END AS TreatmentOrdinal,
T1.CurrencyCode,
T1.SamplingRandomNumber,
T1.Revenue Revenue,
T1.SourceCode
, T1.[IsPriorBooking]
INTO #RevenueDetailCountTmp
FROM #TreatmentDetails T1
WHERE T1.Stage=2
SELECT
T1.TreatmentID,
T1.SamplingRandomNumber,
T1.ProductID,
T1.OptimizationGroupID,
T1.CurrencyCode,
C.CalculatedFromText,
CONVERT(FLOAT,COUNT(1)) CountCalculatedFromText,
T1.TreatmentOrdinal,
Sum(T1.Revenue) AS Revenue,
T1.SourceCode
, T1.[IsPriorBooking]
INTO #RevenueDetailCount
FROM #RevenueDetailCountTmp T1
INNER JOIN #CalculatedFromText C ON T1.ProductID = C.ProductID
AND T1.OptimizationGroupID = C.OptimizationGroupID
AND T1.TreatmentOrdinal = C.TreatmentOrdinal
AND T1.SamplingRandomNumber = C.SamplingRandomNumber
GROUP BY
T1.TreatmentID,
T1.SamplingRandomNumber,
T1.ProductID,
T1.OptimizationGroupID,
T1.CurrencyCode,
C.CalculatedFromText,
T1.TreatmentOrdinal,
T1.SourceCode
, T1.[IsPriorBoo
您可能有两个问题。您参考 PRINT 语句 - 这将在 8000 个字节处停止(4000 个字符,因为您使用的是 nvarchar)。如果您想在 SSMS 中显示整个查询,您最好将其转换为 XML 以进行输出,这将为您提供一个可以在 SSMS 中单击并显示整个内容的字段。
在可见的查询的一小部分中,您实际上在 THEN 的第一部分这里有一个额外的引用,它至少破坏了查询的那一部分:
CASE WHEN T.CalculatedFromText = 2 THEN PS.CalculatedFromText + ' + CAST(T.TreatmentOrdinal AS char)