【发布时间】:2014-05-12 16:51:00
【问题描述】:
我有以下代码:
Dim sqlQuery As String = "IF NOT EXISTS ( SELECT * FROM myTable WHERE columnId = @columnId AND sourceId = @sourceId AND value = @value ) "
sqlQuery += "BEGIN "
sqlQuery += "INSERT INTO myTable SELECT @columnId, @sourceId, @value, " & data & " FROM otherTable WHERE sourceId = @sourceId AND @query END"
Using cn As New SqlConnection(connectStr), _
cmd As New SqlCommand(sqlQuery, cn)
cmd.Parameters.Add("@columnId", Data.SqlDbType.Int).Value = columnId
cmd.Parameters.Add("@sourceId", Data.SqlDbType.Int).Value = sourceId
cmd.Parameters.Add("@value", Data.SqlDbType.NVarChar).Value = value
cmd.Parameters.Add("@query", Data.SqlDbType.NVarChar).Value = query
cn.Open()
cmd.ExecuteNonQuery()
End Using
除@query 之外,所有其他参数化查询都有效。我收到一个异常,上面写着“在预期条件的上下文中指定的非布尔类型的表达式,靠近‘END’。”我不确定我做错了什么。使用 SQL Server 2008 R2。
【问题讨论】:
-
你向@query发送什么样的值?
-
诸如“category = 1”或“country = US”之类的东西
-
好吧,country = US 需要是 country = 'US'(例如)。基本上那个错误是说你在 sqlQuery 中的 SQL 语法是无效的,所以也许发布 sqlQuery 的格式错误的值可以帮助我们(或你)调试它。
-
实际上,我认为您的问题是 @query 可以为空白,因此您的查询看起来像 "IF NOT() BEGIN SELECT * FROM TABLE WHERE A=1 AND END" 和 "AND END" 抛出错误。
-
这并不是严格的测试方法。请在出现此错误时发布 sqlQuery 的值。
标签: sql sql-server vb.net sqlexception parameterized-query