SQL查询中的参数化表名

时间:2011-09-09 16:27:48

标签: sql vb.net parameterized

我正在使用Vb2005来攻击SQL服务器。我有一个非常复杂的查询,它可以访问服务器上相同结构的数据库。我正在研究参数化FROM子句但似乎无法做到这一点。这就是我的尝试

    Dim sql As String = "SELECT * " & _
                        "FROM [@DB].[dbo].[Trips] AS T " & _
                        "WHERE T.DepartTime >= CONVERT(DATETIME, 'Sep 08, 2011', 120);"

    Dim cmd As New System.Data.SqlClient.SqlCommand(sql, conn)
    cmd.Parameters.Add("@DB", SqlDbType.Char)
    cmd.Parameters("@DB").Value = "DriverDb"

根据用户需求,我会点击'DriverDb'或'MaintDb'或'DispDb'数据库。 SQL字符串实际上比在大约5个地方引用db的情况要复杂得多,所以想要简化它以便我可以用参数替换。

2 个答案:

答案 0 :(得分:2)

我想我们不能对数据库名称或表名称这样做,这可能不被视为参数。我的建议是使用变量“db”并将其附加到字符串“sql”,如下所示

Dim db As String = "DriverDb";
Dim sql As String = "SELECT * " & _  
                    "FROM ["& db &"].[dbo].[Trips] AS T " & _                         
                     "WHERE T.DepartTime >= CONVERT(DATETIME, 'Sep 08, 2011', 120);"

希望这会有所帮助!!

答案 1 :(得分:1)

以下问题的答案似乎总结得很好。 Dynamic SQL (passing table name as parameter)如果可能的话,你真的应该避免像这样的动态SQL。