Помощь с командой SQL не работает - PullRequest
0 голосов
/ 29 сентября 2011

У меня есть команда 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 Profiler и вот вывод, который этот запрос фактически генерирует.

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 Ответ

1 голос
/ 29 сентября 2011

Рисунок, я сделаю это ответом, но также хотел убедиться, что я был точен (учитывая, как долго я уже проснулся: grin:).

Из того, что я вижу (и этовозможно, из-за того, что ваше утверждение сжато ради того, чтобы сделать его однострочным в файле кода) у вас есть объявление комментария в середине вашего заявления:

--4 = Voided [...]

Что происходит, вы выполняететолько ваша команда DECLARE и first SET (которые выполняются без ошибок), но остальная часть вашего оператора игнорируется, поскольку она следует объявлению комментария (--).

Убедитесь, чтовы сокращаете свой запрос, что удаляете закомментированные строки.Как только они окажутся в одной строке, SQL не волнует и БУДЕТ игнорировать что-либо за --.

...