#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, потому что я хочу иметь возможность смотреть на вещи в разные моменты времени в процессе отладки. И пока я не буду уверен, что это правильно, я хочу, чтобы все действия были отменены.