【问题标题】:Help with SQL command not working帮助 SQL 命令不起作用
【发布时间】:2011-11-27 08:32:21
【问题描述】:

我正在尝试执行一条 SQL 命令。

语法如下

    Public Shared Function CanRaiseWorkOrder(connection As IDbConnection, ProductID As Guid) As Boolean
        Using sqlCmd As IDbCommand = connection.CreateCommand
            With sqlCmd
                .CommandTimeout = 30
                .CommandType = CommandType.Text
                .CommandText = "DECLARE @CanRaiseWorkOrder BIT, @WorkOrderQtyCount INT, @ProductAvailCount INT SET @WorkOrderQtyCount = (SELECT SUM(Qty) FROM WorkOrder WHERE ProductID = @ProductID AND WorkOrder.Status <> 4) --4 = Voided SET @ProductAvailCount = (SELECT Qty FROM Product WHERE ProductID = @ProductID) IF @WorkOrderQtyCount < @ProductAvailCount BEGIN SET @CanRaiseWorkOrder = 1 END ELSE BEGIN SET @CanRaiseWorkOrder = 0 END SELECT @CanRaiseWorkOrder AS CanRaiseWorkOrder"

                Dim params As New List(Of IDbDataParameter)({
                                                               ProductDAL.CreateTSqlParameter("@ProductID", DbType.Guid, ProductID)
                                                            })

                .Parameters.AddRange(params)

                Return .ExecuteScaler(Of Boolean)()
            End With
        End Using
    End Function

您可能会注意到,那里有一些关于如何创建参数和执行命令的定制,但您可以假设系统的这些方面按要求工作(我们有大量代码可以使用这些功能正常工作方法)。

我可能会让一些人问为什么这不是存储过程,答案是“因为我的老板这么说”。

我已经运行了 SQL 分析器,这里是这个查询实际生成的输出。

exec sp_executesql N'DECLARE @CanRaiseWorkOrder BIT, @WorkOrderQtyCount INT, @ProductAvailCount INT SET @WorkOrderQtyCount = (SELECT SUM(Qty) FROM WorkOrder WHERE ProductID = @ProductID AND WorkOrder.Status <> 4) --4 = Voided SET @ProductAvailCount = (SELECT Qty FROM Product WHERE ProductID = @ProductID) IF @WorkOrderQtyCount < @ProductAvailCount BEGIN SET @CanRaiseWorkOrder = 1 END ELSE BEGIN SET @CanRaiseWorkOrder = 0 END SELECT @CanRaiseWorkOrder',N'@ProductID uniqueidentifier',@ProductID='0908C780-763F-4CE6-B074-CEC01F4451B4'

在查询分析器中运行代码(当我最初创建它时)工作正常,但如果我运行 SQL 命令输出的上述查询,我​​得到的只是“Command(s) completed successfully.

有什么想法吗?

【问题讨论】:

  • 我是在做白日梦,还是 --4 = Voided... 会将字符串的其余部分视为注释,只留下一个 SET 命令?
  • @BradChristie:回答这个问题!

标签: sql vb.net tsql ado.net sqlcommand


【解决方案1】:

图我会做一个答案,但也想确保我是准确的(考虑到我现在已经站了多长时间:grin:)。

据我所见(这可能是由于为了使其成为代码文件中的单行代码而压缩了您的语句),您的语句中间有一个注释声明:

--4 = Voided [...]

发生的事情是你只执行你的 DECLARE 和 first SET 命令(它们没有错误地完成)但是你的语句的其余部分被忽略了,因为它遵循注释声明(-- )。

如果您确实压缩了您的查询,请确保您删除了注释行。一旦它们在一行上,SQL 就不会关心并且会忽略 -- 之后的任何内容。

【讨论】:

  • 天啊,我觉得自己真是个白痴……就是这样。我想我自己已经起床太久了。大声笑我已经尝试了我能想到的一切,但没有得到任何地方。每次我在查询分析器中调试它时,我都会格式化所有内容,从而消除问题。抱歉 2 浪费了您的时间。
  • @MaximGershkovich:不用担心,经过长时间的编码会议后,我们都有脸。 ;-)
猜你喜欢
  • 2018-07-28
  • 2020-11-14
  • 2020-11-22
  • 2017-08-22
  • 1970-01-01
  • 1970-01-01
  • 2021-02-13
  • 2021-04-12
  • 2021-07-26
相关资源
最近更新 更多