您可以更正此 sqlserver 查询吗:
select * from messages where @DepartID In(MsgTo)
@DepartID 是包含部门 ID 的 session 变量。 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
抱歉我的英语不好
最佳答案
我认为您只是遇到了一些语法问题。您是否在 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+''',%')
关于sql - 从表中选择 @variable in(表列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33353100/