【问题标题】:FnSplit not working for SQL stored procedure to take multiple parametersFnSplit 不适用于 SQL 存储过程以获取多个参数
【发布时间】:2018-05-24 11:23:24
【问题描述】:

我有一个存储过程,它当前接受一个值(ChainId)作为参数。我试图允许用户选择(ChainId)的多个值。我的 where 语句如下。有人可以帮我指出比我现在要走的更好的方向。目前,如果我为参数选择多个值,查询将运行并且不返回任何数据。

WHERE EndAuth is null AND CL.CHIND in(
SELECT [Value] FROM dbo.FnSplit(@ChainId, ','))
ORDER BY CL.CHIND 

【问题讨论】:

  • 首先,您使用的是哪个 DBMS?请相应地标记。其次,确保您的 split 函数按预期工作(并且不返回 NULL 值)。你可以试试SELECT * FROM dbo.FnSplit('first value, second value', ',')。第三,由于这不是您的完整查询,请确保没有其他条件或联接实际上在过滤您的行。
  • 当您选择多个值时,将准确的输入显示到@chainID。然后显示该输入的SELECT [Value] FROM dbo.FnSplit(@ChainId, ',')) 的确切输出。
  • 我正在使用 SSMS 2008r。只需在存储过程的末尾添加 #2 然后执行,我就可以使用该语句。此过程是从原始过程中复制而来的,因为我是新手,并且我在末尾用 #2 命名了我的存储过程。感谢您的帮助。

标签: sql stored-procedures query-parameters multiple-value


【解决方案1】:

这是 SQL Server 中的一个流行函数,所以我假设您正在使用它。确保您的参数是 Varchar(MAX) 类型。 @ChainId 作为您的字符串(理想情况下用于 SSRS)传递,',' 作为您的分隔符传递。在 SSRS 中,如果您有一个文本框供用户手动输入多个值,他们将输入类似“value1,value2,value3”的内容。

测试一下:

Declare @Yes_No Varchar(Max)
Set @Yes_No = 'y,n'
Select @yes_no
Select * from SplitString('y,n',',')
Select * from SplitString(@Yes_No,',')

你的结果将是

y,n
----
y
n
----
y
n

为什么我说使用 Varchar(Max) 而不是 int 或 Varchar(10) 是因为这会阻止函数过早地读取所有值。

试试这个:

Declare @Yes_No Varchar(1)
Set @Yes_No = 'y,n'
Select * from SplitString(@Yes_No,',')

结果将是:

y

原因是该函数只接受长度为 1 个字符的值,并将其拆分。如您所见,没有什么可拆分的。

这正是 SSRS 接受参数的方式。 FN_Split 不一定是内置函数,而是一种广受欢迎的函数,旨在允许您将多个值传递给字符串,并带有预先指定的分隔符。因此,请确保您还转到报告中的参数并指定它将允许多个值。您还需要提供潜在值列表供用户选择。您可以通过手动填充一个小列表或以存储过程或表的形式提供另一个数据源来完成此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 2018-09-18
    • 2011-03-03
    • 2016-10-16
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    相关资源
    最近更新 更多