-2
我有一個關於如何在使用EXECUTE sp_executesql運行腳本時給予數據透視參數的查詢。在EXECUTE sp_executesql中使用參數在MS SQL Server中查詢查詢
DECLARE @FactorText AS NVARCHAR(MAX)
DECLARE @RequestID AS NVARCHAR(MAX)
SELECT @FactorText = COALESCE(@FactorText + '], ', '') + CAST('[' + FactorText AS NVARCHAR(MAX))
FROM (
SELECT DISTINCT FactorText
FROM QuoteHODFCreditDebit
where RequestId = @RequestID AND AppliedValue!=0.00
) AS QuoteHODFCreditDebit
SET @FactorText = @FactorText + ']'
DECLARE @DynamicPIVOT AS NVARCHAR(MAX)
DECLARE @ParmDefinition AS NVARCHAR(MAX)
SELECT @DynamicPIVOT = 'SELECT @FactorText
FROM
(
SELECT case
when(appliedValue < 0) then quotename(convert(nvarchar(100), ABS(AppliedValue)),''('')
else CONVERT(nvarchar(100),AppliedValue)
end as AppliedValue, FactorText FROM
QuoteHODFCreditDebit where RequestId = @ResRequest
and appliedValue!=0.00
) CreditDebitFactor
PIVOT (
MAX(AppliedValue) FOR FactorText IN (@FactorText)
) Result;'
SET @ParmDefinition = N'@ResRequest NVARCHAR(MAX),@FactorText NVARCHAR(MAX)';
EXECUTE sp_executesql @DynamicPIVOT, @ParmDefinition, @ResRequest = @RequestID, @FactorText = @FactorText;
在上面的查詢,@ResRequest參數沒有提出任何錯誤,但是作爲參數@FactorText引發的錯誤。
錯誤:'@FactorText'附近語法不正確。
請解決此查詢。
如果您有我的需求示例,那麼您可以發佈。
在此先感謝所有SQL魔術師。
爲什麼所有的DBMS標籤? – Aleksej
您需要小心,不要標記每個DBMS。這顯然是SQL服務器。錯誤的原因是因爲@FactorText超出了動態SQL的範圍。 –
您不能在IN子句或選擇列表中使用變量 – Hogan