如何以字符串到存储过程的形式将int集传递给sqlserver,并在in子句中使用它



我需要调用这样的存储过程:

    exec myProcedure '(5, 15, 45)'

在这个过程中,我需要在冲突中使用像这样:

    SELECT ... FROM table WHERE (days in @intSet)

这总是在WHERE子句中带来语法错误。(SqlServer显然不允许简单地用字符串替换语句的一部分)

我计划这样一个解决方案:

我可以使用CHARDINDEX、SUBSTRING、RTRIM、LTRIM、CONVERT—这不是问题—工作正常。

但我仍然不知道我可以把这些整数放入什么样的变量中,以便以后在in子句中使用它

非常感谢任何想法

Gerald

您需要在数据库中创建一个拆分函数

分割函数的定义

CREATE FUNCTION [dbo].[split]
    (
      @delimited NVARCHAR(MAX),
      @delimiter NVARCHAR(100)
    ) 
 RETURNS @t TABLE (id INT IDENTITY(1,1), val NVARCHAR(MAX))
AS
BEGIN
  DECLARE @xml XML
  SET @xml = N'<t>' + REPLACE(@delimited,@delimiter,'</t><t>') + '</t>'
  INSERT INTO @t(val)
  SELECT  r.value('.','varchar(MAX)') as item
  FROM  @xml.nodes('/t') as records(r)
  RETURN
END

存储过程

然后,您将在您的过程中使用此拆分函数来拆分要与In运算符一起使用的值。

CREATE PROCEDURE GetData
    @intSet         VARCHAR(1000) = NULL
AS
BEGIN
 SET NOCOUNT ON;
 SELECT * FROM TableName 
  WHERE days IN (SELECT Val FROM dbo.split(@intSet ))
END 

相关内容

  • 没有找到相关文章

最新更新