Ant*_*nto 5 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)
Run Code Online (Sandbox Code Playgroud)
它适用于单个值,例如.46,但不是如果值在括号中,例如.(46)或('46'),应该是IN的方式.
我正在使用visual studio,它自动生成访问表适配器的方法来获取值,所以我想我必须通过SQL来做到这一点.
我正在传递一个字符串,例如.Types ="46,267,2010",进入适配器方法,该方法将字符串传递给SQL语句中的@Types.
任何帮助都会很棒.谢谢!
Cha*_*ins 10
这是一个非常常见的问题 - 不确定为什么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
Run Code Online (Sandbox Code Playgroud)
然后使用该功能......
SELECT *
FROM table
WHERE SomeFieldValue In (Select ParsedString From dbo.ParseStringList(@Types))
Run Code Online (Sandbox Code Playgroud)
这是因为你需要用逗号分隔一组值.喜欢
WHERE
T.TYPE_ID IN ('46', '45', '44');
Run Code Online (Sandbox Code Playgroud)
你是使用SQL Server还是Oracle,MySQL?
如果您有一个由多个值组成的字符串,例如
T.TYPE_ID IN ('46,45,44');
Run Code Online (Sandbox Code Playgroud)
您可能需要一个会使您的字符串爆炸的函数使用分隔符(分割或根据您的DBMS调用它)