ahmed_sa Ответов: 2

Как узнать, что ошибка произойдет на каком номере строки SQL server 2012?


Вопрос

У меня есть большая хранимая процедура на sql server 2012 она успешно компилируется при ее создании

когда вы выполняете его, дайте ему параметры

параметр хранимой процедуры exec

это дает мне ошибку

но проблема я не могу знать эта ошибка существует на какой линии

так что мне нужна любая вещь скажите мне об ошибке на какой строке

моя ошибка отображается при выполнении хранимой процедуры и не может ее понять

Msg 121, Уровень 15, Состояние 1, Строка 1
мне нужно сообщение об ошибке, так как ошибка существует на номере строки в качестве примера 45

потому что я работаю над хранимой процедурой может быть доходить до 300 строк

так что мой вопрос что это значит

Msg 121, Уровень 15, Состояние 1, Строка 1

Что я уже пробовал:

exec для процедуры paramtername

не могу дать мне ошибку на какой строке
это дает мне ошибку
Msg 121, Level 15, State 1, Line 1

0x01AA

Я бы предложил попробовать это с помощью отладчика.

2 Ответов

Рейтинг:
2

phil.o

Сообщения об ошибках SQL Server - Msg 121[^]
Текст, соответствующий этому номеру ошибки, выглядит следующим образом::

Список выбора для инструкции Insert содержит больше элементов, чем список вставки. Количество выбранных значений должно совпадать с количеством вставляемых столбцов.


ahmed_sa

спасибо я имею в виду ошибка существует на какой строке не сообщение об ошибке
как
1
2
3
4
5 ошибка здесь
если я работаю над хранимой процедурой у меня есть большое количество строк
мне нужно если хранимая процедура имеет ошибку скажите мне
ошибка в строке Номер 5 Вот так

Richard Deeming

Я не могу создать хранимую процедуру с инструкцией insert, которая породила бы эту ошибку. То CREATE PROCEDURE выдает ошибку и предоставляет точный номер строки, в которой была обнаружена ошибка.

Я подозреваю, что вы используете динамический SQL в своей процедуре, которая, очевидно, не будет иметь номера строки.

Рейтинг:
1

OriginalGriff

Когда я попробую это сделать:

CREATE PROCEDURE ThrowError --1
AS                          --2
BEGIN                       --3
       SET NOCOUNT ON;      --4
       SELECT 1/0           --5
END                         --6
И запустить его:
USE [Testing]
PRINT 'Before...'
EXEC	[dbo].[ThrowError]
PRINT 'After...'
Я получаю номер строки в SP:
Before...
Msg 8134, Level 16, State 1, Procedure ThrowError, Line 5
Divide by zero error encountered.
After...
Так... Я бы предположил, что первая строка вашего SP-это оператор INSERT, и вы не предоставляете достаточно данных.


Я использую SQL Server 2012 R2:
Product Version:          11.0.5388.0
Product Name:             SQL Server 2012
Product Level:            SP2 
Product Edition:          Express Edition (64-bit)
(Получил через этот скрипт: TechNet определяет, какая версия и выпуск компонента SQL Server Database Engine запущена[^] )