[SQL] 선택 쿼리 내부에 저장 프로 시저를 실행하는 방법
SQL선택 쿼리 내부에 저장 프로 시저를 실행하는 방법
SELECT col1,
col2,
col3,
EXEC GetAIntFromStoredProc(T.col1) AS col4
FROM Tbl AS T
WHERE (col2 = @parm)
어떻게 2008 SQL 서버에서이 SQL 쿼리를 작성하는?
해결법
-
==============================
1.덕분에 @twoleggedhorse.
덕분에 @twoleggedhorse.
여기서, 용액이다.
-
==============================
2.기능은 선택 루프 내에서 전화를 쉽게,하지만 그들은 당신이 등을 삽입, 업데이트, 삭제, 그들은 쿼리 작업에만 유용을 실행하지 않습니다. 당신은 데이터를 조작하기 위해 저장 프로 시저가 필요합니다.
기능은 선택 루프 내에서 전화를 쉽게,하지만 그들은 당신이 등을 삽입, 업데이트, 삭제, 그들은 쿼리 작업에만 유용을 실행하지 않습니다. 당신은 데이터를 조작하기 위해 저장 프로 시저가 필요합니다.
그래서,이 질문에 대한 진짜 대답은 당신이 "커서"를 통해 선택 구문의 결과를 반복하고 루프 내에서 프로 시저를 호출해야한다는 것입니다. 다음은 그 예이다 :
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 당신을 위해 업데이트되는 표준 변수합니다. 여기 개체 이름의 나머지 부분은 사용자 정의입니다.
-
==============================
3.만큼 당신이 당신의 저장 프로 시저의 모든 INSERT 또는 UPDATE 문을 수행하지 않는, 당신은 아마 함수 확인하는 것이 좋습니다.
만큼 당신이 당신의 저장 프로 시저의 모든 INSERT 또는 UPDATE 문을 수행하지 않는, 당신은 아마 함수 확인하는 것이 좋습니다.
저장 과정은 외부 프로그램에 의해 실행하거나, 타이밍 된 간격에 대해이다.
내가 할 수있는 것보다 여기에 대한 답변은 더 잘 설명 할 것입니다 :
기능 비교는 SQL Server의 저장 프로 시저
-
==============================
4.당신은 그것으로 당신의 PROC 출력 및 삽입과 일치하는 임시 테이블을 만들 수 있습니다.
당신은 그것으로 당신의 PROC 출력 및 삽입과 일치하는 임시 테이블을 만들 수 있습니다.
CREATE TABLE #Temp ( Col1 INT ) INSERT INTO #Temp EXEC MyProc
-
==============================
5."불가능". 대신 저장 프로 시저의 기능을 사용할 수 있습니다.
"불가능". 대신 저장 프로 시저의 기능을 사용할 수 있습니다.
-
==============================
6.동적 뷰를 생성하고 그것으로부터 결과를 얻을 .......
동적 뷰를 생성하고 그것으로부터 결과를 얻을 .......
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
from https://stackoverflow.com/questions/14506871/how-to-execute-a-stored-procedure-inside-a-select-query by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버 : 쿼리와 컬럼의 디폴트 값을 찾기 (0) | 2020.06.12 |
---|---|
[SQL] #table에 ... 선택에 대한 sp_executesql을 실행하지만, 임시 테이블 데이터를 선택할 수 없다 (0) | 2020.06.12 |
[SQL] @ 기호 - MySQL의에서 재귀 SELECT 질의에 대한 해결책? (0) | 2020.06.12 |
[SQL] 설정 제한 SQL에서 테이블 행에 대한 (0) | 2020.06.12 |
[SQL] 날짜 범위에있는 모든 날짜 SQL 서버에서 가져 오기 (0) | 2020.06.12 |