从表中选择@variable in(table column)

时间:2015-10-26 18:32:11

标签: sql asp.net sql-server-2008 tsql

请你纠正这个sqlserver查询:

select * from messages where @DepartID In(MsgTo)

@DepartID是一个包含部门ID的会话变量。 MsgTo是消息表中的一列,包含值列表,例如。 :' 12'' 10'' 13'' 25' ..等等

我使用了这段代码:

cmd.CommandText = "select * from messages where @DepartID IN(MsgTo)"
cmd.Parameters.AddWithValue("@DepartID ", session("DepartID")) ' = 12 for example

Dim da As New SqlDataAdapter(cmd)
Dim dt As New DataTable
da.Fill(dt)
lbmsg.text = dt.Rows.Count.ToString ' returns 0 rows
抱歉我的英语很差

1 个答案:

答案 0 :(得分:3)

我认为你只是遇到了一些语法问题。你在SQL中声明了@DepartID变量吗?您需要与WHERE子句中的现有列进行比较。像:

SELECT [ColumnName]
FROM [Table]
WHERE [ColumnName] = Value

如果您的部门ID是SQL中的文本类型列,则您必须在输入中使用单引号。当您使用" IN"来查询它们时,您可以在ID等整数中使用单引号。声明,无论如何都会有效。试试这个:

SELECT *
FROM [messages]
WHERE [MsgTo] = @DepartID

因此,如果将@DepartID变量替换为您的值然后执行该语句,它将返回[MsgTo]列等于@DepartID的每一行的所有信息。

如果要传递多个@DepartID,则必须将逗号分隔的文本列表传递给" IN"你的变量的子句如下例所示:

SELECT *
FROM [messages]
WHERE [MsgTo] IN ('1','5','3','12','30')

--Example where @DepartID = '1','5','3','12','30'

我不确定您使用哪种语言来执行SQL,但如果这不起作用,请尝试将SQL语句封装在EXEC()中,如下所示:

EXEC(
    SELECT *
    FROM [messages]
    WHERE [MsgTo] = @DepartID
)

如果您的MsgTo列包含值的字符串列表,并且您想在其中搜索单个@DepartID,请使用以下代码:

DECLARE @DepartID as INT; SET @DepartID = 12; --Hard coded example

SELECT *
FROM [messages]
WHERE [MsgTo] LIKE ('%,'''+@DepartID+''',%')