Отлаживать хранимую процедуру с пользовательским типом данных

#sql-server #tsql

#sql-сервер #tsql

Вопрос:

Возможно ли отлаживать хранимую процедуру с пользовательским типом данных в качестве параметра?

Редактировать: какой синтаксис для ее вызова? (exec ….)

Мой тип:

 CREATE TYPE [dbo].[FacturaInspeccion] AS TABLE(  
    [sIdServicio] [nvarchar](3) NOT NULL,  
    [nIdTipoInspeccion] [int] NOT NULL,  
    [sIdTipoMotivoInspeccion] [nvarchar](2) NOT NULL,  
    [nIdTipoVehiculo] [int] NOT NULL,  
    [nBase] [real] NOT NULL,  
    [nNoPeriodica] [real] NULL,  
    [nTarifaConProyecto] [real] NULL,  
    [nTarifaSinyecto] [real] NULL,  
    [nTasaTrafico] [real] NULL,  
    [nDescuento] [real] NULL,  
    [nTotal] [float] NULL  
  

)

ПЕРЕЙТИ

Ответ №1:

Я понял, что это просто таблица, поэтому я объявил тип, вставил значения и вызвал хранимую процедуру.

Сохранить объявление процедуры:

СОЗДАЙТЕ ПРОЦЕДУРУ [dbo].[spInsertarFactura]
@tableFacturaInspeccion Фактурная спецификация ДОСТУПНА ТОЛЬКО ДЛЯ ЧТЕНИЯ,

Вызов хранимой процедуры:

ИСПОЛЬЗУЙТЕ [DATABASE] ПЕРЕЙДИТЕ
К ОБЪЯВЛЕНИЮ @return_value int

ОБЪЯВИТЕ @tablaTmp FacturaInspeccion

ВСТАВИТЬ В @tablaTmp (sIdServicio,nIdTipoInspeccion,sIdTipoMotivoInspeccion, nIdTipoVehiculo, nBase, nNoPeriodica, nTarifaConProyecto, nTarifaSinyecto, nTasaTrafico, nDescuento, nTotal)
ЗНАЧЕНИЯ (sIdServicio,nIdTipoInspeccion, sIdTipoMotivoInspeccion, nIdTipoVehiculo).(79, 1, ’00’, 1, 2, 2, 2, 2, 2, 10, 100)

EXEC @return_value = [dbo].[spInsertarFactura]

И после этого время для отладки.

Ответ №2:

Да, вы можете отладить ее обычным способом, но, к сожалению, вы не получаете хорошего представления о данных в TVP.

Смотрите следующие элементы Microsoft Connect для получения дополнительной информации (и голосуйте, если хотите получить лучшую поддержку для отладки TVP ;)).

Комментарии:

1. И как вы можете отправить тип данных в «exec …»?

2. Если вам нужно передать таблицу в процедуру, я бы предложил рассмотреть возможность передачи XML-таблицы в XML-параметр в процедуре.

3. @ch3r1f, объявляя переменную этого типа (которая даст вам табличную переменную), загружая в нее данные, а затем передавая переменную — ничего особенного там…

4. @Lucero, да, ничего особенного, взгляните на мой ответ. В любом случае спасибо 🙂

5. @ch3r1f, в следующий раз, возможно, задайте вопрос менее вводящим в заблуждение способом: ваш вопрос действительно был «как вручную вызвать SP с параметрами, имеющими табличное значение» или около того — проблема с отладкой (которую вы не можете легко просмотреть в данных TVP) — это то, что я рассмотрел в своем ответе.

Ответ №3:

Позвольте мне предложить вам добавить отладочную переменную к вашим переменным ввода (с значением по умолчанию 0), затем, когда вы захотите протестировать SP, установите значение debug равным 1, и вы сможете запускать запросы к данным в тестовом режиме. Например, вы могли бы добавить строку, которая гласит

ЕСЛИ @debug = 1 Begin, выберите * из @tableFacturaInspeccion END

Это позволило бы вам увидеть, что данные, которые вы хотели ввести, соответствуют тому, для чего вы их предназначили instnce. Или, если вы выполняете более сложный запрос с объединением как частью ana insert, вы могли бы просмотреть параметр select в режиме debuig и откатить все вставки, пока вы выясняете, как правильно выполнить процедуру. Я всегда включаю отладочную или тестовую переменную во что-либо сложное sp, потому что я хочу иметь возможность смотреть на вещи в разные моменты времени в процессе отладки. И пока я не буду уверен, что это правильно, я хочу, чтобы все действия были отменены.