Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Форматирование выходного параметра процедуры / 16 сообщений из 16, страница 1 из 1
14.11.2002, 16:12:10
    #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
14.11.2002, 16:23:36
    #32068024
zorro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование выходного параметра процедуры
Хотя-бы так поправьте

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

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

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


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

Насчет FORMATMESSAGE . Почитал, но по видимому использовать не получится, т.к. параметры, которые необходимо ей передать заранее неизвестны, в каждом отдельном случае из количество и значения могут быть разными.
...
Рейтинг: 0 / 0
14.11.2002, 17:19:00
    #32068056
fima
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование выходного параметра процедуры
Вообще то SQL сам выводит сообщения об ошибках, поэтому Вам необходимости делать это нет. FORMATMESSAGE необходима для формирования строк собственных ошибок. Чем вас не устраивает вывод SQL Server'а?
P.S. О универсальных процедурах. На мой взгляд, универсальные процедуры ведут к универсальным проблеммам, и у динамических запросов, на мой взгляд очень много минусов и мало плюсов, и использовать их надо осторожно.
...
Рейтинг: 0 / 0
15.11.2002, 02:18:16
    #32068155
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование выходного параметра процедуры
гых... на счет универсальности я согласен....
на счет exec не согласен категорически.....
у меня например без него никак....
пришлось бы выносить логику на клиента или писать трехзвенку.....
запры через exec тоже кэшируются.....
если нужно с параметрами sp_executesql....
да в другой базе/сервере можно запустит динамик через ту же sp_executesql...
...
Рейтинг: 0 / 0
18.11.2002, 12:22:54
    #32068905
Creator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование выходного параметра процедуры
Кстати это очень интересный вопрос как отформатировать
сообщение об ошибке номер XXX.
Есть такая функция dt_displayoaerror может это может помочь.
...
Рейтинг: 0 / 0
18.11.2002, 12:36:14
    #32068913
fima
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование выходного параметра процедуры
А что за функция то dt_displayoaerror, не могу найти описания... может плохо ищу... на msdn описания нет...
...
Рейтинг: 0 / 0
18.11.2002, 12:38:55
    #32068918
Александр Спелицин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование выходного параметра процедуры
2 Creator:
Простите, а что это за функция (dt_displayoaerror) и где она живет? Ни в MSDN, ни в BOL я ее не нашел. Может быть просветите?
...
Рейтинг: 0 / 0
18.11.2002, 19:34:00
    #32069291
Creator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование выходного параметра процедуры
В том то и дело что в MSDN её нету. Но она есть в базе master. Хоть я сильно сомневаюсь что это то что надо для получения уже готового сообщения об ошибке.
...
Рейтинг: 0 / 0
19.11.2002, 10:23:49
    #32069407
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование выходного параметра процедуры
В случае возникновения ошибки, она и без того появится в отформатированом виде. Нет необходимости её выводить дополнительно.
...
Рейтинг: 0 / 0
19.11.2002, 10:31:45
    #32069417
fima
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование выходного параметра процедуры
2Creator А какой у Вас сервер? Я на MSSQL 2000 не в функциях не в процедурах не нашел, да и префикс dt не встречал... Если можно, приведите текст этой функции, интересно ведь...
...
Рейтинг: 0 / 0
22.11.2002, 19:49:28
    #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
22.11.2002, 20:03:51
    #32071541
fima
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование выходного параметра процедуры
Насколько, я понял это обертка sp_OAGetErrorInfo, а вот что о ней написано... Obtains OLE Automation error information, так что это по моему немного не то что нужно, или я ошибаюсь?
...
Рейтинг: 0 / 0
25.11.2002, 17:02:40
    #32072115
Creator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование выходного параметра процедуры
Да судя по всему Вы правы. И всё таки как вытащить готовое отформатированное сообщение об ошибке остаётся открытым.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Форматирование выходного параметра процедуры / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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