저장 프로시저의 출력을 sql server의 변수로 되돌리는 방법
SQL Server에서 저장 프로시저를 실행하고 출력을 변수에 할당합니다(단일 값을 반환함)?
이는 반환할 정보의 특성에 따라 다릅니다.
단일 정수 값인 경우 다음을 사용할 수 있습니다.return
진술
create proc myproc
as
begin
return 1
end
go
declare @i int
exec @i = myproc
정수가 아니거나 스칼라 값이 여러 개인 경우 출력 매개 변수를 사용할 수 있습니다.
create proc myproc
@a int output,
@b varchar(50) output
as
begin
select @a = 1, @b='hello'
end
go
declare @i int, @j varchar(50)
exec myproc @i output, @j output
데이터 집합을 반환하려면 다음을 사용할 수 있습니다.insert exec
create proc myproc
as
begin
select name from sysobjects
end
go
declare @t table (name varchar(100))
insert @t (name)
exec myproc
당신은 심지어 커서를 돌려줄 수도 있지만 그것은 끔찍하기 때문에 예를 들어 설명하지 않겠습니다 :)
사용할 수 있습니다.return
정수 상태 코드(및 정수 유형만)를 반환하는 저장 프로시저 내부의 문입니다.관례에 따라 반환 값 0은 성공에 사용됩니다.
안되면return
이 명시적으로 설정되면 저장 프로시저가 0을 반환합니다.
CREATE PROCEDURE GetImmediateManager
@employeeID INT,
@managerID INT OUTPUT
AS
BEGIN
SELECT @managerID = ManagerID
FROM HumanResources.Employee
WHERE EmployeeID = @employeeID
if @@rowcount = 0 -- manager not found?
return 1;
END
그리고 당신은 이렇게 부릅니다.
DECLARE @return_status int;
DECLARE @managerID int;
EXEC @return_status = GetImmediateManager 2, @managerID output;
if @return_status = 1
print N'Immediate manager not found!';
else
print N'ManagerID is ' + @managerID;
go
반환 값은 상태 코드에만 사용해야 합니다.데이터를 반환하려면 출력 매개 변수를 사용해야 합니다.
데이터 집합을 반환하려면 유형의 출력 매개 변수를 사용합니다.cursor
.
이 코드를 사용하여 올바르게 작동합니다.
CREATE PROCEDURE [dbo].[sp_delete_item]
@ItemId int = 0
@status bit OUT
AS
Begin
DECLARE @cnt int;
DECLARE @status int =0;
SET NOCOUNT OFF
SELECT @cnt =COUNT(Id) from ItemTransaction where ItemId = @ItemId
if(@cnt = 1)
Begin
return @status;
End
else
Begin
SET @status =1;
return @status;
End
END
SP 실행
DECLARE @statuss bit;
EXECUTE [dbo].[sp_delete_item] 6, @statuss output;
PRINT @statuss;
proc의 Return 문을 사용하여 temp 변수를 할당하고 다른 저장 프로시저에 전달해야 했습니다.값이 정상적으로 할당되었지만 매개 변수로 전달할 때 값이 손실되었습니다.임시 테이블을 생성하고 테이블에서 변수를 설정해야 했습니다(SQL 2008).
From this:
declare @anID int
exec @anID = dbo.StoredProc_Fetch @ID, @anotherID, @finalID
exec dbo.ADifferentStoredProc @anID (no value here)
To this:
declare @t table(id int)
declare @anID int
insert into @t exec dbo.StoredProc_Fetch @ID, @anotherID, @finalID
set @anID= (select Top 1 * from @t)
언급URL : https://stackoverflow.com/questions/11965269/how-to-return-the-output-of-stored-procedure-into-a-variable-in-sql-server
'code' 카테고리의 다른 글
'권장 아이콘 파일 누락 - 번들에 .png 형식의 정확히 '120x120' 픽셀의 iPhone/iPod Touch용 앱 아이콘이 포함되어 있지 않습니다.' (0) | 2023.06.02 |
---|---|
CALL 명령 대 /WAIT 옵션으로 시작 (0) | 2023.06.02 |
git 분기에서 수정된 모든 파일 가져오기 (0) | 2023.06.02 |
Swift에서 NSMutableAttributedString을 사용하여 특정 텍스트 색상 변경 (0) | 2023.06.02 |
오류: 요청한 클래스를 단일 덱스 파일에 넣을 수 없습니다.주 인덱스 목록을 제공해 보십시오.방법 : 72477 > 65536 (0) | 2023.06.02 |