我正在使用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的情况要复杂得多,所以想要简化它以便我可以用参数替换。
答案 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。