首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在存储过程的字符串中将int-set传递给sqlserver并在IN-Clause中使用它

如何在存储过程的字符串中将int-set传递给sqlserver并在IN-Clause中使用它
EN

Stack Overflow用户
提问于 2014-09-27 17:31:10
回答 1查看 289关注 0票数 1

我需要像这样调用一个存储过程:

代码语言:javascript
复制
    exec myProcedure '(5, 15, 45)'

在这个过程中,我需要在in-Clasue中使用int-set,如下所示:

代码语言:javascript
复制
    SELECT ... FROM table WHERE (days in @intSet)

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

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

我可以很容易地使用CHARINDEX,SUBSTRING,RTRIM,LTRIM,CONVERT将字符串的整数值分成几个整数-这不是问题-它工作得很好。

但是我仍然不能弄清楚我可以把这些整数放入哪种类型的变量中,以便稍后将其与IN-Clause一起使用?

我们非常感谢您的任何想法

杰拉尔德

EN

回答 1

Stack Overflow用户

发布于 2014-09-27 18:30:10

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

拆分函数的定义

代码语言:javascript
复制
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运算符一起使用的值。

代码语言:javascript
复制
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 
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26073243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档