동적 SQL 결과를 변수에 할당
동적 SQL을 수행하여 테이블의 모든 열을 문자열로 변환하는 중입니다.
그래서 결국 나는
EXEC(@template);
여기서 @dump는 동적으로 생성된 쿼리입니다.
col1 col2 col3
---------------
1 7 13
2 8 14
3 9 15
4 10 16
5 11 17
6 12 18
(결과: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18)
변수에 결과 문자열을 할당하려면 어떻게 해야 합니까?
뭐 그런 거?
DECLARE @result AS varchar(max);
SET @result = EXEC(@template);
sp_executesql을 출력 매개 변수와 함께 사용할 수 있습니다.
declare @S nvarchar(max) = 'select @x = 1'
declare @xx int
set @xx = 0
exec sp_executesql @S, N'@x int out', @xx out
select @xx
결과:
(No column name)
1
편집
내 샘플에서@S
당신의 것 대신에@template
보시다시피 다음에 값을 할당합니다.@x
그래서 당신은 수정할 필요가 있습니다.@template
두 번째 인수에서 정의한 변수에 내부적으로 쉼표로 구분된 문자열을 할당합니다.sp_executesql
내 샘플에서N'@x int out'
당신은 아마 그것을 원할 것입니다.varchar(max)
출력 매개 변수.비슷한 것N'@Result varchar(max) out'
다음은 마스터에서 쉼표로 구분된 문자열을 작성하는 다른 예입니다.spt_values
declare @template nvarchar(max)
set @template =
'select @Result += cast(number as varchar(10))+'',''
from master..spt_values
where type = ''P''
'
declare @CommaString varchar(max)
set @CommaString = ''
exec sp_executesql @template, N'@Result varchar(max) out', @CommaString out
select @CommaString
이러한 답변의 대부분은 이 문제에 대한 해결책으로 sp_executesql을 사용합니다.sp_executesql을 사용할 때 몇 가지 제한 사항이 있다는 것을 알았지만 EXEC()를 사용하여 대안을 제시하고자 했습니다.SQL Server 2008을 사용하고 있으며 이 스크립트에서 사용하는 개체 중 일부는 이전 버전의 SQL Server에서 사용할 수 없다는 것을 알고 있으므로 주의하십시오.
DECLARE @CountResults TABLE (CountReturned INT)
DECLARE
@SqlStatement VARCHAR(8000) = 'SELECT COUNT(*) FROM table'
, @Count INT
INSERT @CountResults
EXEC(@SqlStatement)
SET @Count = (SELECT CountReturned FROM @CountResults)
SELECT @Count
대신 사용할 수 있습니다.exec
그러면 출력 매개 변수를 지정할 수 있습니다.
declare @out_var varchar(max);
execute sp_executesql
N'select @out_var = ''hello world''',
N'@out_var varchar(max) OUTPUT',
@out_var = @out_var output;
select @out_var;
"안녕하세요 세계"를 인쇄합니다.
저장 프로시저 내에서 SQL 문자열을 실행하기 위한 샘플:
(커서 루프 내에서 회귀 테스트를 먼저 확인하기 위해 각 테이블의 항목 수를 비교하는 데 사용합니다.)
select @SqlQuery1 = N'select @CountResult1 = (select isnull(count(*),0) from ' + @DatabaseFirst+'.dbo.'+@ObjectName + ')'
execute sp_executesql @SqlQuery1 , N'@CountResult1 int OUTPUT', @CountResult1 = @CountResult1 output;
동적 테이블에서 변수의 SEQUENCE 값을 가져오는 동안 이 작업을 수행해야 합니다.
DECLARE @temp table (#temp varchar (MAX));
DECLARE @SeqID nvarchar(150);
DECLARE @Name varchar(150);
SET @Name = (Select Name from table)
SET @SeqID = 'SELECT NEXT VALUE FOR '+ @Name + '_Sequence'
insert @temp exec (@SeqID)
SET @SeqID = (select * from @temp )
PRINT @SeqID
결과:
(1 row(s) affected)
1
언급URL : https://stackoverflow.com/questions/6968512/assign-result-of-dynamic-sql-to-variable
'programing' 카테고리의 다른 글
PL/SQL의 숨겨진 기능 (0) | 2023.07.18 |
---|---|
SQL*Plus에서 잘못된 형식 지정 (0) | 2023.07.18 |
Firebase 배포가 JS 파일을 업데이트하지 않음 (0) | 2023.07.08 |
Git에서 현재 체크아웃된 커밋 찾기 (0) | 2023.07.08 |
의 Oracle 연결 풀링.그물 (0) | 2023.07.08 |