请你纠正这个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
抱歉我的英语很差
答案 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+''',%')