powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Форматирование выходного параметра процедуры
16 сообщений из 16, страница 1 из 1
Форматирование выходного параметра процедуры
    #32068017
Nikolo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть процедура:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE PROCEDURE dbo.XXX(
  @Id         int,
  @ErrorId    int OUTPUT,
  @ErrorText  varchar( 1000 ) OUTPUT)
AS
BEGIN
  DECLARE @SQL varchar( 1000 )
  SELECT @SQL = 'DELETE dbo.T_Reklama WHERE Id='+CONVERT(int, @Id)
  EXEC (@SQL)
  SELECT @ErrorId = @@ERROR
  IF @ErrorId >  0  SELECT @ErrorText = Description FROM master..SysMessages WHERE ERROR = @ErrorId
  ELSE SELECT @ErrorText = ''
END
GO


Вызываю так:
Код: plaintext
1.
2.
3.
4.
DECLARE @ErrId int
DECLARE @ErrTx varchar( 1000 )
EXEC XXX  4 , @ErrId OUTPUT, @ErrTx OUTPUT
print @ErrId
print @ErrTx


Результат:
Код: plaintext
%ls statement conflicted with %ls %ls constraint '%.*ls'. The conflict occurred in database '%.*ls', table '%.*ls'%ls%.*ls%ls.


Вопрос: что сделать, чтобы вместо всех % стояли нормальные значения?
...
Рейтинг: 0 / 0
Форматирование выходного параметра процедуры
    #32068024
zorro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотя-бы так поправьте

SELECT @SQL = 'select 1 where 1='+CONVERT(varchar(10), @Id)
...
Рейтинг: 0 / 0
Форматирование выходного параметра процедуры
    #32068032
Nikolo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Согласен, ошибся, но сути это не меняет...

Может все-таки есть стандартная переменная, которая хранит текст текущей ошибки также, как @@ERROR хранит ее код?
...
Рейтинг: 0 / 0
Форматирование выходного параметра процедуры
    #32068033
fima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Вашей процедуре, динамический запрос совершенно излишен, можно написать просто
Код: plaintext
1.
DELETE dbo.T_Reklama WHERE Id=@Id

а по поводу форматирования описания ошибки почитайте о функции FORMATMESSAGE
...
Рейтинг: 0 / 0
Форматирование выходного параметра процедуры
    #32068038
Nikolo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пример оператора:
Код: plaintext
DELETE dbo.T_Reklama WHERE Id=@Id


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

Насчет FORMATMESSAGE . Почитал, но по видимому использовать не получится, т.к. параметры, которые необходимо ей передать заранее неизвестны, в каждом отдельном случае из количество и значения могут быть разными.
...
Рейтинг: 0 / 0
Форматирование выходного параметра процедуры
    #32068056
fima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще то SQL сам выводит сообщения об ошибках, поэтому Вам необходимости делать это нет. FORMATMESSAGE необходима для формирования строк собственных ошибок. Чем вас не устраивает вывод SQL Server'а?
P.S. О универсальных процедурах. На мой взгляд, универсальные процедуры ведут к универсальным проблеммам, и у динамических запросов, на мой взгляд очень много минусов и мало плюсов, и использовать их надо осторожно.
...
Рейтинг: 0 / 0
Форматирование выходного параметра процедуры
    #32068155
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гых... на счет универсальности я согласен....
на счет exec не согласен категорически.....
у меня например без него никак....
пришлось бы выносить логику на клиента или писать трехзвенку.....
запры через exec тоже кэшируются.....
если нужно с параметрами sp_executesql....
да в другой базе/сервере можно запустит динамик через ту же sp_executesql...
...
Рейтинг: 0 / 0
Форматирование выходного параметра процедуры
    #32068905
Creator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати это очень интересный вопрос как отформатировать
сообщение об ошибке номер XXX.
Есть такая функция dt_displayoaerror может это может помочь.
...
Рейтинг: 0 / 0
Форматирование выходного параметра процедуры
    #32068913
fima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что за функция то dt_displayoaerror, не могу найти описания... может плохо ищу... на msdn описания нет...
...
Рейтинг: 0 / 0
Форматирование выходного параметра процедуры
    #32068918
Александр Спелицин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Creator:
Простите, а что это за функция (dt_displayoaerror) и где она живет? Ни в MSDN, ни в BOL я ее не нашел. Может быть просветите?
...
Рейтинг: 0 / 0
Форматирование выходного параметра процедуры
    #32069291
Creator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том то и дело что в MSDN её нету. Но она есть в базе master. Хоть я сильно сомневаюсь что это то что надо для получения уже готового сообщения об ошибке.
...
Рейтинг: 0 / 0
Форматирование выходного параметра процедуры
    #32069407
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В случае возникновения ошибки, она и без того появится в отформатированом виде. Нет необходимости её выводить дополнительно.
...
Рейтинг: 0 / 0
Форматирование выходного параметра процедуры
    #32069417
fima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Creator А какой у Вас сервер? Я на MSSQL 2000 не в функциях не в процедурах не нашел, да и префикс dt не встречал... Если можно, приведите текст этой функции, интересно ведь...
...
Рейтинг: 0 / 0
Форматирование выходного параметра процедуры
    #32071539
Creator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL Server 2000 SP2
CREATE PROCEDURE dbo.dt_displayoaerror
@iObject int,
@iresult int
as

set nocount on

declare @vchOutput varchar(255)
declare @hr int
declare @vchSource varchar(255)
declare @vchDescription varchar(255)

exec @hr = sp_OAGetErrorInfo @iObject, @vchSource OUT, @vchDescription OUT

select @vchOutput = @vchSource + ': ' + @vchDescription
raiserror (@vchOutput,16,-1)

return


GO
...
Рейтинг: 0 / 0
Форматирование выходного параметра процедуры
    #32071541
fima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько, я понял это обертка sp_OAGetErrorInfo, а вот что о ней написано... Obtains OLE Automation error information, так что это по моему немного не то что нужно, или я ошибаюсь?
...
Рейтинг: 0 / 0
Форматирование выходного параметра процедуры
    #32072115
Creator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да судя по всему Вы правы. И всё таки как вытащить готовое отформатированное сообщение об ошибке остаётся открытым.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Форматирование выходного параметра процедуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]