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