1
У меня есть следующая хранимая процедура, и я хотел бы вернуть фактическую ошибку SQL Server, а не мое сообщение, как это можно сделать?Поднять реальную ошибку SQL из хранимой процедуры?
Я в настоящее время использую RAISERROR
и покажу сообщение, но я бы хотел вернуть фактическую ошибку SQL.
Благодаря
ALTER PROCEDURE [dbo].[sp_DBA_DROPFIELD]
(
@fieldDisplayName varchar(max),
@tableSeq int,
@viewName varchar(max),
@isVirtual varchar(4)
)
AS
DECLARE
@sql_table_name varchar(max),
@sql_fieldname varchar(max),
@sql_columnName varchar(max),
@sql_fieldSeq int,
@sql_SEQ_FKTABLE int,
@sql_FKTABLENAME varchar(max),
@sql_EXEC_DROPCONSTRAINT varchar(max),
@sql_EXEC_DROPCOLUMN varchar(max),
@sql_EXEC_DELETEVIRTUAL varchar(max),
@sql_EXEC_DELETEFIELDREF int
BEGIN TRAN
BEGIN TRY
select @sql_table_name = TABLENAME from SD_TABLES where SEQUENCE = + @tableSeq
select @sql_columnName = COLUMN_NAME, @sql_fieldSeq = SEQUENCE, @sql_SEQ_FKTABLE = FK_TABLE from SD_FIELDS where DISPLAY_NAME = @fieldDisplayName AND SEQ_TABLE = @tableSeq
if @sql_SEQ_FKTABLE IS NOT NULL
BEGIN
Select @sql_FKTABLENAME = TABLENAME from SD_TABLES where SEQUENCE = @sql_SEQ_FKTABLE
SET @sql_EXEC_DROPCONSTRAINT = 'ALTER TABLE ' + @sql_table_name + ' DROP CONSTRAINT [FK__' + @sql_table_name + '___' + @sql_FKTABLENAME + '_]'
SET @sql_EXEC_DROPCOLUMN = 'ALTER TABLE ' + @sql_table_name + ' DROP COLUMN ' + @sql_columnName
EXEC sp_executesql @sql_EXEC_DROPCONSTRAINT
EXEC sp_executesql @sql_EXEC_DROPCOLUMN
END
if @isVirtual = 'true'
BEGIN
SET @sql_EXEC_DELETEVIRTUAL = 'ALTER TABLE ' + @sql_table_name + ' DROP COLUMN ' + @sql_columnName
EXEC sp_executesql @sql_EXEC_DELETEVIRTUAL
END
SET @sql_EXEC_DELETEFIELDREF = 'DELETE FROM SD_FIELDS WHERE SEQUENCE = ' + @sql_fieldSeq
EXEC sp_executesql @sql_EXEC_DELETEFIELDREF
COMMIT
END TRY
BEGIN CATCH
ROLLBACK TRAN
RAISERROR('An error has occured, no changes have been made', 5, 1)
END CATCH
Side Примечание: вы должны ** не * * используйте префикс 'sp_' для ваших хранимых процедур. Microsoft [зарезервировала этот префикс для собственного использования (см. * Именование сохраненных процедур *)] (http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx) и вы рискуете столкнуться с именем когда-нибудь в будущем. [Это также плохо для производительности вашей хранимой процедуры] (http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix). Лучше просто просто избегать 'sp_' и использовать что-то еще в качестве префикса - или никакого префикса вообще! –
спасибо, Марк, да, я помню это сейчас. Я изменю его. Вы действительно ответили на мой вопрос, поскольку я не могу видеть его в редактировании. Спасибо – realtek
Какую ** версию ** SQL Server вы используете? В версии 2012 года есть новая функциональность, которая упростит это ... –