繁体   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