선택 쿼리 내에서 저장 프로시저를 실행하는 방법
SELECT col1,
col2,
col3,
EXEC GetAIntFromStoredProc(T.col1) AS col4
FROM Tbl AS T
WHERE (col2 = @parm)
SQL Server 2008에서 이 SQL 쿼리를 작성하는 방법은 무엇입니까?
감사합니다 @ 두 발 달린 말.
여기 해결책이 있습니다.
처음에 우리는 함수를 만들었습니다.
CREATE FUNCTION GetAIntFromStoredProc(@parm Nvarchar(50)) RETURNS INTEGER AS BEGIN DECLARE @id INTEGER set @id= (select TOP(1) id From tbl where col=@parm) RETURN @id END
그런 다음 선택 쿼리를 수행합니다.
Select col1, col2, col3, GetAIntFromStoredProc(T.col1) As col4 From Tbl as T Where col2=@parm
기능은 선택 루프 내에서 호출하기 쉽지만 삽입, 업데이트, 삭제 등을 실행할 수 없습니다.쿼리는 쿼리 작업에만 유용합니다.데이터를 조작하려면 저장 프로시저가 필요합니다.
따라서 이 질문에 대한 진정한 대답은 "커서"를 통해 선택한 문의 결과를 반복하고 해당 루프 내에서 절차를 호출해야 한다는 것입니다.다음은 예입니다.
DECLARE @myId int;
DECLARE @myName nvarchar(60);
DECLARE myCursor CURSOR FORWARD_ONLY FOR
SELECT Id, Name FROM SomeTable;
OPEN myCursor;
FETCH NEXT FROM myCursor INTO @myId, @myName;
WHILE @@FETCH_STATUS = 0 BEGIN
EXECUTE dbo.myCustomProcedure @myId, @myName;
FETCH NEXT FROM myCursor INTO @myId, @myName;
END;
CLOSE myCursor;
DEALLOCATE myCursor;
참고:@@FETCH_STATUS
는 업데이트되는 표준 변수입니다.여기에 있는 나머지 개체 이름은 사용자 지정입니다.
proc 출력과 일치하는 temp table을 생성하고 이 테이블에 삽입할 수 있습니다.
CREATE TABLE #Temp (
Col1 INT
)
INSERT INTO #Temp
EXEC MyProc
"가능하지 않습니다.저장 프로시저 대신 함수를 사용할 수 있습니다.
저장 프로시저에서 INSERT 또는 UPDATE 문을 수행하지 않는 한 이 문을 함수로 만들기를 원할 수 있습니다.
저장 프로시저는 외부 프로그램에 의해 실행되거나 시간 간격에 따라 실행됩니다.
여기서의 답변은 제가 할 수 있는 것보다 더 잘 설명해 줄 것입니다.
"가능하지 않습니다.이 쿼리를 사용하여 이 작업을 수행할 수 있습니다.여기서 초기화
declare @sql nvarchar(4000)=''
매개 변수를 사용하여 SP의 Value & exec 명령 설정
SET @sql += ' Exec spName @param'
EXECUTE sp_executesql @sql, N'@param type', @param = @param
SP를 일회성 쿼리로 사용하여 무언가를 빠르게 확인하려면 SP의 내부를 꺼내어 새 쿼리 창에 붙여넣고 더 이상 SP가 아니기 때문에 원하는 작업을 수행하기만 하면 됩니다.
동적 뷰를 생성하여 결과를 얻습니다.
CREATE PROCEDURE dbo.usp_userwise_columns_value
(
@userid BIGINT
)
AS
BEGIN
DECLARE @maincmd NVARCHAR(max);
DECLARE @columnlist NVARCHAR(max);
DECLARE @columnname VARCHAR(150);
DECLARE @nickname VARCHAR(50);
SET @maincmd = '';
SET @columnname = '';
SET @columnlist = '';
SET @nickname = '';
DECLARE CUR_COLUMNLIST CURSOR FAST_FORWARD
FOR
SELECT columnname , nickname
FROM dbo.v_userwise_columns
WHERE userid = @userid
OPEN CUR_COLUMNLIST
IF @@ERROR <> 0
BEGIN
ROLLBACK
RETURN
END
FETCH NEXT FROM CUR_COLUMNLIST
INTO @columnname, @nickname
WHILE @@FETCH_STATUS = 0
BEGIN
SET @columnlist = @columnlist + @columnname + ','
FETCH NEXT FROM CUR_COLUMNLIST
INTO @columnname, @nickname
END
CLOSE CUR_COLUMNLIST
DEALLOCATE CUR_COLUMNLIST
IF NOT EXISTS (SELECT * FROM sys.views WHERE name = 'v_userwise_columns_value')
BEGIN
SET @maincmd = 'CREATE VIEW dbo.v_userwise_columns_value AS SELECT sjoid, CONVERT(BIGINT, ' + CONVERT(VARCHAR(10), @userid) + ') as userid , '
+ CHAR(39) + @nickname + CHAR(39) + ' as nickname, '
+ @columnlist + ' compcode FROM dbo.SJOTran '
END
ELSE
BEGIN
SET @maincmd = 'ALTER VIEW dbo.v_userwise_columns_value AS SELECT sjoid, CONVERT(BIGINT, ' + CONVERT(VARCHAR(10), @userid) + ') as userid , '
+ CHAR(39) + @nickname + CHAR(39) + ' as nickname, '
+ @columnlist + ' compcode FROM dbo.SJOTran '
END
EXECUTE sp_executesql @maincmd
END
-----------------------------------------------
SELECT * FROM dbo.v_userwise_columns_value
언급URL : https://stackoverflow.com/questions/14506871/how-to-execute-a-stored-procedure-inside-a-select-query
'programing' 카테고리의 다른 글
getdate()의 날짜 부분만 가져오는 방법은 무엇입니까? (0) | 2023.07.09 |
---|---|
래퍼를 사용하여 데이터베이스에 작성된 보기에 액세스하는 방법 (0) | 2023.07.09 |
Git 저장소의 처음 두 커밋을 결합하시겠습니까? (0) | 2023.07.09 |
Oracle에서 AUTO_INCREMENT로 ID를 생성하는 방법은 무엇입니까? (0) | 2023.07.09 |
sqlplus 원격 연결 제공 ORA-21561 (0) | 2023.07.09 |