簡體   English   中英

Report Builder 3.0基礎SQL

[英]Report Builder 3.0 underlying SQL

我有一個報表構建器3.0報表,上面有幾個參數。 具體來說,是一個帳號(在數據庫中定義為char(12))。 該數據庫是供應商提供的數據庫,因此我對數據庫架構的控制為零。

我的問題是,當我具有帳戶ID的自由格式參數時,該參數如何轉換為發送到sql數據庫的查詢?

我處理這些自由格式字段的方式是,我有一個用戶定義的函數:

Public Function ConvertStringtoArray(sourceString as String) As string()
    Dim arrayOfStrings() As String
    Dim emptyString as String = " "
    If String.IsNullOrEmpty(sourceString) Then
    arrayOfStrings = emptyString.Split(",")
    Else
    arrayOfStrings = sourceString.Replace(" ", "").Split(",")
    End If
    return arrayOfStrings
End Function

該參數定義為:@AcctList = code.ConvertStringToArray(Parameters!AcctList.Value)

sql查詢在where子句中具有以下內容:Ac.Account_ID In(@AcctList)

我的問題是它如何構建“條款”。 從字面上看是否會是這樣的:其中Ac.Account_ID在(N'Acct1',N'Acct2')中。

我以為是這樣,我認為很重要的原因是,如果我的where子句具有Where Ac.Account_ID In('TGIF'),則在SSMS中運行該查詢時,查詢將在不到1秒的時間內運行。如果我在哪里輸入Ac.Account_ID(N'TGIF'),將花費13+秒。 返回的數據集總數僅為917行。

我要查詢的數據庫是2008 R2 SP2,其兼容性設置為SQL 2008。

您的假設對於“(@parameter)中的where事物”實際上是“(value1”,“ value2”等)中的謂詞是正確的。 前提是@parameter允許多個值。 但是,您可以將參數綁定到查詢以及使用代碼。 您可以擁有除主要數據集以外的其他數據集,例如簡單的“從值中選擇值”,其中值將是參數選擇所需的值表。 除非必須進行字符串拆分,否則這通常會更有效率。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM