나는 실행할 동적 SQL을 가지고 있는데, 그 결과를 변수에 저장해야한다.sp_executesql 결과를 변수로 가져 오는 방법은 무엇입니까?
나는 sp_executesql
을 사용할 수 있지만 이것을 수행하는 방법에 대한 명확한 예를 찾을 수 없다는 것을 알고있다. 당신이 출력 매개 변수가있는 경우
나는 실행할 동적 SQL을 가지고 있는데, 그 결과를 변수에 저장해야한다.sp_executesql 결과를 변수로 가져 오는 방법은 무엇입니까?
나는 sp_executesql
을 사용할 수 있지만 이것을 수행하는 방법에 대한 명확한 예를 찾을 수 없다는 것을 알고있다. 당신이 출력 매개 변수가있는 경우
당신은
DECLARE @retval int
DECLARE @sSQL nvarchar(500);
DECLARE @ParmDefinition nvarchar(500);
DECLARE @tablename nvarchar(50)
SELECT @tablename = N'products'
SELECT @sSQL = N'SELECT @retvalOUT = MAX(ID) FROM ' + @tablename;
SET @ParmDefinition = N'@retvalOUT int OUTPUT';
EXEC sp_executesql @sSQL, @ParmDefinition, @[email protected] OUTPUT;
SELECT @retval;
을 할 수 있지만 그렇지, 그리고 SP 변경할 수없는 경우 :
-- Assuming that your SP return 1 value
create table #temptable (ID int null)
insert into #temptable exec mysp 'Value1', 'Value2'
select * from #temptable
꽤 있지만, 작품 없음.
DECLARE @vi INT
DECLARE @vQuery VARCHAR(1000)
SET @vQuery = 'SELECT @vi= COUNT(*) FROM <TableName>'
EXEC SP_EXECUTESQL
@Query = @vQuery
, @Params = N'@vi INT OUTPUT'
, @vi = @vi OUTPUT
SELECT @vi
viOUTPUT 및 viINT 변수의 선언은 어디에 있습니까? –
이것은 나를 위해 일했다.더 많은 투표가있는 대답이 작동하지 않았습니다. –
매개 변수 @vQuery **는 반드시 VARCHAR가 아닌 NVARCHAR로 선언되어야합니다. – eFarzad
DECLARE @tab AS TABLE (col VARCHAR(10), colu2 varchar(10))
INSERT into @tab EXECUTE sp_executesql N'SELECT 1 as col1, 2 as col2 union all SELECT 1 as col1, 2 as col2 union all SELECT 1 as col1, 2 as col2'
SELECT * FROM @tab
전에이 방법을 사용했습니다. 첫 번째'insert into @ tab'에서만 작동하는 것 같습니다. 'insert into @ tab'을 실행하고 여러개의'execute sp_executesql'을 실행 시키면 다른 sql로'select * from @ tab' 만 첫 번째 결과를 보여줍니다 –
죄송합니다. 제 2 선택에서 오류가 발생하여 제로 행을 반환했습니다. 이 방법은 훌륭하게 작동하며 임시 테이블을 필요로하지 않습니다! –
이 작업을 수행하려면 SQL Server 2008이 필요합니다. –
선언 @variable INT
Exec을 @variable = PROC_NAME
리턴 값은 대체로 "리턴"성공을 반환하지만, 그 결과를하는 데 사용되지 않는 (0) 또는 오류 번호 (1-65K). 위의 결과는 sp_executesql이 값을 반환하지 않는다는 것을 나타냅니다.이 값은 올바르지 않습니다. sp_executesql은 성공하면 0을 반환하고 실패하면 다른 숫자를 반환합니다. 아래에서
, @i 인덱스 'NonExistantStaticsName'를 찾을 수 없습니다이 메시지 2727, 수준 11, 상태 1, 줄 1 을 보여줍니다 2727
DECLARE @s NVARCHAR(500)
DECLARE @i INT;
SET @s = 'USE [Blah]; UPDATE STATISTICS [dbo].[TableName] [NonExistantStatisticsName];';
EXEC @i = sys.sp_executesql @s
SELECT @i AS 'Blah'
SSMS를 반환합니다.
이것은 오래전부터 필요했는지 확신 할 수 없지만 @@ ROWCOUNT 변수를 사용하여 이전 SQL 문과 관련된 행 수를 확인할 수 있습니다.
예를 들어 동적 Update 문을 구성하고 exec로 실행할 때 유용합니다. @@ ROWCOUNT는 갱신 된 행 수를 표시합니다.
DECLARE @ValueTable 표 ( 값 VARCHAR (100) )
SELECT @sql = N'SELECT SRS_SizeSetDetails.'[email protected]_NAME+' FROM SRS_SizeSetDetails WHERE FSizeID = '''[email protected]+''' AND SRS_SizeSetID = '''[email protected]_SizeSetID+'''';
INSERT INTO @ValueTable
EXEC sp_executesql @sql;
SET @Value='';
SET @Value = (SELECT TOP 1 Value FROM @ValueTable)
DELETE FROM @ValueTable
당신이 1 개 이상의 값이이를 사용하여 반환 할 경우
DECLARE @sqlstatement2 NVARCHAR(MAX);
DECLARE @retText NVARCHAR(MAX);
DECLARE @ParmDefinition NVARCHAR(MAX);
DECLARE @retIndex INT = 0;
SELECT @sqlstatement = 'SELECT @retIndexOUT=column1 @retTextOUT=column2 FROM XXX WHERE bla bla';
SET @ParmDefinition = N'@retIndexOUT INT OUTPUT, @retTextOUT NVARCHAR(MAX) OUTPUT';
exec sp_executesql @sqlstatement, @ParmDefinition, @[email protected] OUTPUT, @[email protected] OUTPUT;
반환 값은 @retIndex 및 @retText입니다.
sp는 sp_executesql @myQuery입니다. – JohnIdol
'@ retvalOUT = @ retval OUTPUT'? 'sp_executesql'의 세 번째 매개 변수는'@retval OUTPUT'일까요? –
나는 그것을 얻었다! 선택적으로 매개 변수의 이름을 허용합니다. –