帮助SQL命令无法正常工作

时间:2011-09-29 02:31:59

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

我正在尝试执行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.

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

图I我会把它作为一个答案,但也想确保我是准确的(考虑到我现在已经多久了:笑:)。

从我所看到的(这可能是因为为了使其成为代码文件中的单行而缩减你的陈述),你在陈述的中间有一个评论声明:

--4 = Voided [...]

正在发生的事情是你只执行你的DECLARE和第一个 SET命令(这些命令没有错误),但你的语句的其余部分被忽略,因为它遵循注释声明({{1 }})。

确保您是否确实压缩了删除注释行的查询。一旦他们在一条线上,SQL就不关心并且会忽略--之后的任何事情。