2013-12-12 57 views
0

我想在我的SSRS 2008報告的簡單查詢中使用「拆分」功能。但是,出現錯誤「數據集的查詢執行失敗」SlsmRealNum「。」分割「不是公認的內置函數名稱」。但是,如果我在查詢中打開「表達式」框,它會列爲常用函數(文本),因此不確定它爲什麼失敗?如何在查詢表達式中使用常用函數?

我簡單的SELECT語句是:

select slsm_num, slsm_msid from Salesman where slsm_msid = split(User.UserID,"\").GetValue(1) 

現在拿到報告工作,我有一個參數(SlsmnNum)已在其拆分表達(獲得用戶的MSID)和然後使用@SlsmnNum參數作爲MSID在數據集Salesrepum中使用上述查詢的第二個參數。如果可能的話,我想不必有2個parapmeters,只需要一個就可以得到真正的salesrep#。任何幫助是極大的讚賞!

回答

0

您的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

+0

感謝您的回覆:)但你的建議基本上是我已經在做的。我有1個參數獲取MSID值(使用「= split(User!UserID,」\「).GetValue(1)」作爲默認表達式值,然後我在另一個參數中使用該參數來執行實際的SELECT語句到桌上。我正在尋找的是獲取第一個獲取MSID的參數的RID,並將它全部放在第二個參數中,使用SELECT語句中的「split」並且被轟出。 Kim –

+0

正如我在答案中所說的那樣,SQL沒有分割功能,所以你不能這樣做。即使通過向數據庫添加用戶定義的函數來解決分割問題,也不能直接在SSRS中的SQL查詢中引用內置字段 - 它們是兩個獨立的獨立事物,因此您可以使用參數傳遞價值。一旦你添加一個UDF來修復你發佈的錯誤,你將會有一個新的User.UserId被視爲一個表列,並且查詢引擎將失敗。 – ShellNinja

+0

SQL查詢不會有絲毫的線索User.UserId是什麼... SELECT User.UserId,看看會發生什麼。 – ShellNinja

相關問題