我試圖在SSRS中將參數轉換爲十進制。我有一個in條款,因爲它的多選。我可以選擇1並且運行良好,但是如果我選擇多於1,它會說SSRS將參數鑄造成十進制多選
「關鍵字附近的語法錯誤」爲「。」。
我在我的查詢語句中的where子句中轉換我的參數。
WHERE LOAD_NO IN(CAST(@Load爲十進制))
我很困惑,爲什麼它會帶回的語法錯誤,如果我選擇了多個從列表中。
感謝
我試圖在SSRS中將參數轉換爲十進制。我有一個in條款,因爲它的多選。我可以選擇1並且運行良好,但是如果我選擇多於1,它會說SSRS將參數鑄造成十進制多選
「關鍵字附近的語法錯誤」爲「。」。
我在我的查詢語句中的where子句中轉換我的參數。
WHERE LOAD_NO IN(CAST(@Load爲十進制))
我很困惑,爲什麼它會帶回的語法錯誤,如果我選擇了多個從列表中。
感謝
我很困惑,爲什麼它會帶回的語法錯誤,如果我 選擇多個從列表中。
簡短的回答
因爲WHERE LOAD_NO IN (CAST(1,2,N as DECIMAL))
不是一個有效的T-SQL語句。
龍答案
當您在查詢中使用多值參數,報表服務會,如果你的參數包含1倍的值,或多個值產生不同的查詢。
讓我們來簡化你的榜樣以下查詢:
SELECT * FROM TABLE WHERE LOAD_NO IN (@Load)
只有一個值,該查詢將具有以下格式:
exec sp_executesql N'SELECT * FROM TABLE WHERE LOAD_NO IN (@Load)', N'@Load int', @Load=<YourValue>
這是帶有參數的查詢:@Load
。
現在,具有多個值,查詢將成爲
exec sp_executesql N'SELECT * FROM TABLE WHERE LOAD_NO IN (<YourValue1>, <YourValue2>,<YourValueN>)'
的@Load
參數已取代值的列表。
因此,現在我的建議是重新考慮您的查詢設計,並將@Load
作爲值列表。
我們不能爲您提供最佳的解決方案,因爲它確實取決於數據,只有您擁有所有的細節,但我仍然可以拋出一些想法。
我的頭,我能想到的頂部:
LOAD_NO
代替,但執行計劃可能會失去,如果任何索引的好處。IF EXISTS
而不是IN
。如果您有其他問題,請不要猶豫,運行SQL Server Profiler查看生成的查詢。
我不知道你的數據是什麼樣子,所以我不知道如果這些選項會有所幫助,但這裏有幾個建議:
嘗試把CAST
上LOAD_NO
代替:
WHERE CAST(LOAD_NO爲varchar)IN(@Load)
在WHERE
clau創建splitString
函數喜歡這裏的接受後(T-SQL split string)和訪問SE:
WHERE LOAD_NO IN(SELECT CAST(VAL爲十進制)FROM dbo.splitString(@Load, ''))