您的select語句是作爲SQL執行的,因此您得到的錯誤實際上來自SQL服務器。這可能是你感到困惑的地方。
SSRS有兩個組件 - SQL語句和報表表達式。通常,SQL語句用於通過查詢數據庫來生成數據集。報表表達式用於組織,彙總和過濾從SQL數據庫獲得的數據集。由於SQL語句在SQL數據庫中執行,因此只有數據庫中的函數可用。您發佈的代碼是SQL語句而不是報表表達式。
例如,您不能使用報表表達式並期望它在SSMS中工作?不,因爲它們是兩種不同的語法和目的完全不同的實體。當涉及到在SQL語句中使用內置的SSRS函數時,它不起作用,數據庫沒有關於內置User.UserId的概念,因此您必須使用參數將值傳輸到SQL查詢。這是參數的定義和目的以及它們存在的原因。
Split是SSRS中的一個函數,這就是爲什麼您在表達式引用中看到它的原因,但是,它不是SQL中的函數。您發佈的代碼是SQL語法,所以我打賭這是您用來獲取數據集的SQL語句。因此查詢失敗,因爲SQL DB沒有分割函數。
您可以將此拆分功能添加到您的數據庫中,代碼位於:Split String in SQL。您還可以在where子句中使用以下內容,以下是更新後的SQL語句。
SELECT slsm_num, slsm_msid from Salesman where slsm_msid = SUBSTRING(@UserId, PATINDEX('%\%', @UserId), LEN(@UserId))
您可以將@UserId參數的值設置爲User!UserID的表達式,而不是在您的select語句中指定它。
SSRS表達式示例具有類似於您的代碼試圖完成的功能,如果您希望在報表一側使用相同的功能。你正在尋找的功能是InStr()。在報表上側可以使用的線沿線的東西:
=Parameters!User.Value.Substring(Parameters!User.Value.IndexOf("\")+1, Parameters!User.Value.Length-Parameters!User.Value.IndexOf("\")-1)
表達的例子可以在這裏找到:MSDN Expression examples。
感謝您的回覆:)但你的建議基本上是我已經在做的。我有1個參數獲取MSID值(使用「= split(User!UserID,」\「).GetValue(1)」作爲默認表達式值,然後我在另一個參數中使用該參數來執行實際的SELECT語句到桌上。我正在尋找的是獲取第一個獲取MSID的參數的RID,並將它全部放在第二個參數中,使用SELECT語句中的「split」並且被轟出。 Kim –
正如我在答案中所說的那樣,SQL沒有分割功能,所以你不能這樣做。即使通過向數據庫添加用戶定義的函數來解決分割問題,也不能直接在SSRS中的SQL查詢中引用內置字段 - 它們是兩個獨立的獨立事物,因此您可以使用參數傳遞價值。一旦你添加一個UDF來修復你發佈的錯誤,你將會有一個新的User.UserId被視爲一個表列,並且查詢引擎將失敗。 – ShellNinja
SQL查詢不會有絲毫的線索User.UserId是什麼... SELECT User.UserId,看看會發生什麼。 – ShellNinja