sql - 从表中选择 @variable in(表列)

标签 sql asp.net sql-server-2008 t-sql

您可以更正此 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/

相关文章:

mysql - SQL,用电子邮件替换部分字符串

c# - 在 ASMX Web 服务之间共享枚举

c# - 选择/取消选择所有复选框

css - 如何在 GridMvc 3.0.0 中为行动态着色

sql - 包含特殊字符的 XML 路径表达式

sql - 在 SQL 中将多行合并为一行

sql - 如何查看 plpgsql 生成的 SQL

php - 使用 Command Create 更新 Yii 中的查询不起作用

sql-server - 数据库设计 : Calculating the Account Balance

mysql - 涉及聚合函数的 SQL 查询