Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 ROLLBACK внутри инструкции INSERT-EXEC  [new]
MaxiMaxiM
Member

Откуда:
Сообщений: 111
Есть процедура:

CREATE PROCEDURE AGREEMENT
	 @Number	VarChar(21)
	,@Account	Int 
	,@Name		VarChar(250)
	,@ID		Int
	,@Agreement	BigInt		OUT
AS BEGIN BEGIN TRY
	SET NOCOUNT ON;
	DECLARE	@SubTran	Bit	= CASE	WHEN @@TranCount > 0 AND Xact_State() = 1 THEN 1 ELSE 0 END
	DECLARE	@Wiring		dbo.Example
	DECLARE	@Variable TABLE (
		 Identificator  Int
		,CardNumber	VarChar(21)
		,Agreement	BigInt
		,Currency	SmallInt
		,Account	Int 
		,ClientName	VarChar(250)
		)
	IF (@SubTran = 1)
		SAVE  TRAN 
	ELSE	BEGIN TRAN 

	INSERT	@Wiring	(Pole1, Pole2, Pole3, Pole4, Pole5, Pole6)
	VALUES		(@Number ,@Agreement,45,3333, @Account,@Name )

	INSERT	@Variable
	EXEC	ProcedureName @Wiring, 'Additional agreements', @ID
	SELECT	@Agreement = V.Agreement
	FROM	@Variable V
	IF (@SubTran = 0)
		COMMIT TRAN
END TRY BEGIN CATCH
	IF (@@TranCount > 0) AND(Xact_State() = 1)
		ROLLBACK TRAN
	DECLARE	@Error NVarChar(2048) = Error_Message()
	RAISERROR('%s',18,1,@Error);
	RETURN	@@Error
END CATCH END
GO


Выдает ошибку: Невозможно использовать инструкцию ROLLBACK внутри инструкции INSERT-EXEC
Подскажите пожалуйста, как переписать запрос
16 апр 13, 13:07    [14186649]     Ответить | Цитировать Сообщить модератору
 Re: ROLLBACK внутри инструкции INSERT-EXEC  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
MaxiMaxiM,

а зачем явная транзакция?
16 апр 13, 13:13    [14186683]     Ответить | Цитировать Сообщить модератору
 Re: ROLLBACK внутри инструкции INSERT-EXEC  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Я вижу только табличные переменные.
Но они не имеют никакого отношения к транзакции.
16 апр 13, 13:14    [14186690]     Ответить | Цитировать Сообщить модератору
 Re: ROLLBACK внутри инструкции INSERT-EXEC  [new]
invm
Member

Откуда: Москва
Сообщений: 9834
Ну вот и разбирайтесь, почему в ProcedureName транзакция откатывается.
16 апр 13, 13:14    [14186693]     Ответить | Цитировать Сообщить модератору
 Re: ROLLBACK внутри инструкции INSERT-EXEC  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
не савсем понятно зачем ведь етот огород с табличным типом ,вызовом процедуры.....и вложеными транзакциями ,вам оно точно так надо ?
16 апр 13, 15:18    [14187559]     Ответить | Цитировать Сообщить модератору
 Re: ROLLBACK внутри инструкции INSERT-EXEC  [new]
ziktuw
Member

Откуда:
Сообщений: 3552
invm
Ну вот и разбирайтесь, почему в ProcedureName транзакция откатывается.


Вероятно, у автора эта процедура дана как данность (вендорская), и надо ее использовать.

2MaxiMaxiM:
Сделайте вызов этой процедуры и обсчет результата внутри CLR-процедуры.
Но если необходимо использовать только T-SQL по религиозным соображениям, то заверните вызов процедуры в OPENQUERY, где прилинкованый сервер - сделанный сам к себе. Производительность в этом решении не обещаю.
16 апр 13, 15:54    [14187850]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить