sql - 将字符串传递到 SQL WHERE IN

标签 sql sql-server where-in

我正在开发一个查询页面,用户在其中选择一个代表不同类型的值,每个类型都由一个 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))

关于sql - 将字符串传递到 SQL WHERE IN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6945223/

相关文章:

sql-server - SQL Server 2005 : How Secure is SQL Server Authentication?

mysql - 使用数组更新列(Mysql 过程)

c# - 将 C# 字符串作为 SELECT WHERE IN 的 SQL 参数传递

mysql - 将 WHERE IN 参数视为 AND 而不是 OR

mysql - 如何编写查询来返回每日回访用户?

mysql - 选择一个类别中的所有书籍,但属于其他类别的书籍除外

java - sqljdbc4.jar - 无法连接到 MSSQL 服务器实例 - SSL 错误?

sql - 如何在 SQL Server Express Edition 中每天运行存储过程?

sql - BigQuery : Format ISO Date

java - Hibernate 标准在属性上相同