将字符串传递到 SQL WHERE IN

2023-12-23

我正在开发一个查询页面,用户在其中选择代表不同类型的值,每个类型都由 ID 标识。 问题是使用 WHERE IN 方法从数据库中选择这些 ID。

这是我的SQL语句

SELECT M.REG_NO, T.TYPE_ID 
    FROM MAIN AS M 
        INNER JOIN CLASSIFICATION AS C 
            ON M.REG_NO = C.REG_NO
        INNER JOIN TYPE AS T 
            ON T.TYPE_ID = C.TYPE_ID
    WHERE T.TYPE_ID IN (@Types)

它将适用于一个单一值,例如。 46,但如果该值位于括号中则不是,例如。 (46) 或 ('46'),IN 应该如此。

我正在使用 Visual Studio,它会自动生成访问表适配器以获取值的方法,因此我认为我必须通过 SQL 来执行此操作。

我正在传递一个字符串,例如。 Types = "46,267,2010" ,进入适配器方法,该方法将字符串传递到 SQL 语句中的 @Types 中。

任何帮助都会很棒。谢谢!


这是一个非常常见的问题——不知道为什么 TSQL 还没有处理它。无论如何,我发现最适合我的解决方案是将变量转换为表,然后您可以对其使用 IN() 就可以了。

从函数开始:

CREATE Function [dbo].[ParseStringList]  (@StringArray nvarchar(max) )  
Returns @tbl_string Table  (ParsedString nvarchar(max))  As  

BEGIN 

DECLARE @end Int,
        @start Int

SET @stringArray =  @StringArray + ',' 
SET @start=1
SET @end=1

WHILE @end<Len(@StringArray)
    BEGIN
        SET @end = CharIndex(',', @StringArray, @end)
        INSERT INTO @tbl_string 
            SELECT
                Substring(@StringArray, @start, @end-@start)

        SET @start=@end+1
        SET @end = @end+1
    END

RETURN
END

然后使用该功能...

SELECT * 
FROM table
WHERE SomeFieldValue In (Select ParsedString From dbo.ParseStringList(@Types))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将字符串传递到 SQL WHERE IN 的相关文章

随机推荐

  • Google Calendar API 阻止 Django 启动

    我有一个 Django 1 9 1 项目 它工作得很好 直到我添加了提供的代码Google 日历 API 文档 https developers google com google apps calendar quickstart pyth
  • C++ 中未评估的上下文是什么?

    我经常想到的一个例子是 sizeof表达式 它不计算表达式 而是通过静态类型确定大小 例如 int func sizeof func 这是我的思维极限 所以如果还有其他未评估的上下文 那么它们是什么呢 幸运的是 该标准有一个方便的列表 5
  • 在 ASP.Net 中为不同的会话变量设置不同的超时

    是否可以为 ASP Net 中的不同会话设置不同的超时 Edited我的意思是 在同一页面中我有 2 个会话变量 Session ss1 和 Session ss2 是否可以为每个会话设置超时 或者是否有做同样的事情 比如将会话保存到 co
  • 将int所有字节设置为(unsigned char)0,保证代表零?

    This is not a matter of recommended practise nor undefined behavior but about what the c standard actually guarantees in
  • 如何添加一个范围内的数字

    嘿 所以我想做一个挑战 将 1000 以内 3 或 5 的倍数的每个数字相加 当我输入以下代码时 for x in xrange 1000 if x 3 0 or x 5 0 place list x sum place 它只是列出了所有
  • 是否可以解析整个字符串?

    如你所知 JavaScript 的parseFloat函数仅在遇到无效字符之前起作用 例如 parseFloat 10 123 10 123 parseFloat 12 zzzz 12 parseFloat z12 NaN 有没有一种方法或
  • ngx-bootstrap typeahead 不显示下拉菜单

    我正在将一个应用程序从 AngularJS 迁移到 Angular 但我在新的 typeahead 实现上遇到了障碍 已经过去一天了 我尝试了几个 API 最后决定采用最相似的 API我在 AngularJS 版本中使用的是什么 this
  • 英特尔处理器:“如果 CPUID.06H:EAX.[7] = 1”是什么意思?

    英特尔处理器数据表中的以下注释是什么意思 如何在 Linux 中的驱动程序代码中检查这一点 如果CPUID 06H EAX 7 1 我在英特尔处理器的软件开发人员手册的寄存器描述表的注释栏中遇到了这种类型的语句 Ref https soft
  • 如何在 Go 中管理 Windows 用户帐户?

    我需要能够从 Go 应用程序管理 Windows 本地用户帐户 并且似乎如果不使用 CGo 就没有本机绑定 我最初的搜索让我发现人们说最好使用 exec Command 来运行 net user 命令 但在解析响应代码时这似乎很混乱且不可靠
  • 实体框架 - MySQL - 日期时间格式问题

    我有一个简单的表格 其中有几个日期字段 每当我运行以下查询时 var docs from d in base EntityDataContext document reviews select d ToList 我收到以下异常 Unable
  • 带有 UIImage 或远程 URL 的 UNNotificationAttachment

    In my Notification Service Extension我正在从 URL 下载图像以显示为UNNotificationAttachment在通知中 因此 我将此图像作为 UIImage 并且不需要将其写入光盘上的应用程序目录
  • 使用 Google UMP SDK 时 Admob TCF 错误

    我最近根据以下要求集成了 UMP SKD文档 https developers google com admob ump android quick start 现在我从 Adbmob 收到错误报告 其中指出许多广告请求由于错误 1 1 而
  • Swift 3 中的 SCNGeometryElement 设置

    我硬着头皮开始将我的应用程序转换为 Swift 3 一如既往 该转换器还有很多不足之处 在这种情况下 我不确定如何正确编码新版本 这是原文 let indexes CInt 0 1 2 3 let dat NSData bytes inde
  • 为什么 dir 不显示所有 Python 对象属性?

    为什么当我调用时某些对象方法 属性不显示dir在物体上 Example from scipy import sparse e sparse eye 2 H in dir e returns False 但打电话e H工作得很好 返回另一个稀
  • 更改绑定属性的值时如何为文本块的背景设置动画?

    我有一个非常简单的 wpftoolkit da tagrid 来显示股票市场的出价和要价 我的网格绑定到ObservableCollection
  • android.util.Log#println_native() 中有什么?

    Here https android googlesource com platform frameworks base master core java android util Log java is the android util
  • 带有按键侦听器的 Java swing gui 程序在 Linux 中不起作用

    我用java编写了一个基本的控制板GUI 当按下箭头键时 文本将显示按下键盘上的哪个按钮 并且按钮将改变颜色 问题是这个程序在 Windows 中运行良好 但是当我在运行名为 raspbian 的 Linux 版本的树莓派上尝试它时 这似乎
  • 计算包含任何文本的单元格的数量

    我想计算包含某个范围内任何内容的单元格 任何包含文本 数字或其他内容的单元格都应该在我的结果单元格中加一 我发现这个功能 countif range criteria 但这对我不起作用 因为我不知道在标准中输入什么 我怎样才能做到这一点 你
  • 尝试解释 Node-Neo4j API

    我对编码还很陌生 所以如果我的代码不可读或者我的问题过于简单 请原谅我 我正在尝试创建一个小型服务器应用程序 除其他外 显示 neo4j 节点的属性 我正在使用 node js Express 和 Aseem Kishore 的 Node
  • 将字符串传递到 SQL WHERE IN

    我正在开发一个查询页面 用户在其中选择代表不同类型的值 每个类型都由 ID 标识 问题是使用 WHERE IN 方法从数据库中选择这些 ID 这是我的SQL语句 SELECT M REG NO T TYPE ID FROM MAIN AS