SQL Server 저장 프로 시저의 CATCH
절에서 데이터베이스 오류로 구성된 결과 집합을 반환해야하지만 그 문제가 있습니다. 커서를 사용하여 결과 집합을 반환해야합니까? 그렇다면 .NET 응용 프로그램의 OUTPUT
매개 변수에 대한 형식 선언은 무엇입니까? Object
과 Variant
을 시도했지만 작동하지 않았습니다. SQL Server에서 VB.NET 응용 프로그램으로 결과 집합을 반환하십시오.
SELECT
문을 사용하여 간단한 방법을 시도하고 내
CATCH
절에 같은 따라서가 아니라 또 다른 하나의 저장 프로 시저와 함께 작동 : 하나의 저장 프로 시저 때와
while (@I <= @count)
begin
BEGIN TRY
-- delete all previous rows inserted in @customerRow for previous counts @I
delete from @customerRow
-- this is inserting the current row that we want to save in database
insert into @customerRow
SELECT
[id],[firstname], [lastname], [street], [city],
[phone],[mobile],[fax], [email], [companyName],
[licence],[brn], [vat], [companyStreet], [companyCity], [status]
FROM
(SELECT
ROW_NUMBER() OVER (ORDER BY id ASC) AS rownumber,
[id], [firstname], [lastname], [street], [city],
[phone], [mobile], [fax], [email], [companyName],
[licence], [brn], [vat], [companyStreet], [companyCity], [status]
FROM
@registerDetails) AS foo
WHERE
rownumber = @I
-- this stored procedure handles the saving of the current customer row just defined above
-- if there is any error from that sproc, it will jump to CATCH block
--save the error message in the temp table and continue
--with the next customer row in the while loop.
exec dbo.sp_SaveCustomer @customerRow
END TRY
BEGIN CATCH
IF @@TranCount = 0
-- Transaction started in procedure.
-- Roll back complete transaction.
ROLLBACK TRANSACTION;
if XACT_STATE()= -1 rollback transaction
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT @ErrorMessage = ERROR_MESSAGE() + ' ' + (select firstname from @registerDetails where [email protected])
SELECT @ErrorSeverity = ERROR_SEVERITY();
SELECT @ErrorState = ERROR_STATE()
INSERT INTO #registrationResults (error,id)
SELECT @ErrorMessage, @I
END CATCH
set @I = @I +1
end
COMMIT TRANSACTION registerTran
select * from #registrationResults
위의 작품
ta.Fill(registrationErrors, clientDetailsDT)
곳 registrationErrors
및 clientDetailsDT
강하게 데이터 테이블을 입력있다 : 나는 나의 vb.net 코드를 호출합니다.
이 사람은하지 않습니다 :
begin catch
IF @@TranCount > 0 or XACT_STATE()= -1 ROLLBACK TRANSACTION;
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
DECLARE @ErrorLine INT;
SELECT @ErrorMessage = ERROR_MESSAGE();
SELECT @ErrorSeverity = ERROR_SEVERITY();
SELECT @ErrorState = ERROR_STATE();
SELECT @ErrorLine = ERROR_Line();
****ERROR -- THIS SELECT WAS MESSING ALL UP as it was this select that was being returned to the .NET and not the select of the desired #temp table after, hence returning 0 resultset as this select was EMPTY. !!
select status_indicator from InsertInvoiceTriggerData where session_GUID = guid**
delete from InsertInvoiceTriggerData where session_GUID = @guid**
INSERT INTO #registrationResults (error,id)
SELECT @ErrorMessage, NULL
select * from #registrationResults
end catch
모든 제안 방법 결과 집합을 반환?
언급 한대로 스칼라 매개 변수가 단일 출력으로 정상적으로 작동하지만 내 경우에는 트랜잭션이 while 루프에서 진행되고 트랜잭션이 성공하지 않을 때마다 저장된 지점으로 롤백되고 오류 메시지가 저장됩니다 위와 같이 임시 테이블에. 루프가 완료되면 결과 집합을 반환합니다. 그러나 CATCH 블록의 임시 테이블에서 언급 한 매개 변수를 반환하려는 경우 어떻게 구현합니까? – user2043688
음, 오류 결과 집합을 XML로 변환하고 XML 출력 매개 변수를 통해 반환 할 수 있습니다. 왜냐하면 2014 년이 되더라도 테이블 변수 매개 변수는 여전히 읽기 전용입니다. –
원본 게시물을 다시 한 번 살펴 보겠습니다. 데이터베이스 코드가 포함되어 있습니다. 또한 MSDN 설명서에 따르면이 방법은 저장 프로 시저간에 작동하지만 .NET에서 커서를 읽는 방법은 무엇입니까? http://msdn.microsoft.com/en-us/library/ms188655.aspx – user2043688