How to get sp_executesql result into a variable?

后端 未结 10 1431
刺人心
刺人心 2020-11-22 16:06

I have a piece of dynamic SQL I need to execute, I then need to store the result into a variable.

I know I can use sp_executesql but can\'t find clear e

相关标签:
10条回答
  • 2020-11-22 16:44

    If you want to return more than 1 value use this:

    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, @retIndexOUT=@retIndex OUTPUT, @retTextOUT=@retText OUTPUT;
    

    returned values are in @retIndex and @retText

    0 讨论(0)
  • 2020-11-22 16:45

    DECLARE @ValueTable TABLE ( Value VARCHAR (100) )

                        SELECT @sql = N'SELECT SRS_SizeSetDetails.'+@COLUMN_NAME+' FROM SRS_SizeSetDetails WHERE FSizeID = '''+@FSizeID+''' AND SRS_SizeSetID = '''+@SRS_SizeSetID+'''';
    
                        INSERT INTO @ValueTable
                        EXEC sp_executesql @sql;
    
                        SET @Value='';
    
                        SET @Value = (SELECT TOP 1  Value FROM @ValueTable)
    
                        DELETE FROM @ValueTable
    
    0 讨论(0)
  • 2020-11-22 16:51

    If you have OUTPUT parameters you can do

    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, @retvalOUT=@retval OUTPUT;
    
    SELECT @retval;
    

    But if you don't, and can not modify the SP:

    -- Assuming that your SP return 1 value
    create table #temptable (ID int null)
    insert into #temptable exec mysp 'Value1', 'Value2'
    select * from #temptable
    

    Not pretty, but works.

    0 讨论(0)
  • 2020-11-22 16:53

    This worked for me:

    DECLARE @SQL NVARCHAR(4000)
    
    DECLARE @tbl Table (
        Id int,
        Account varchar(50),
        Amount int
    ) 
    
    -- Lots of code to Create my dynamic sql statement
    
    insert into @tbl EXEC sp_executesql @SQL
    
    select * from @tbl
    
    0 讨论(0)
  • 2020-11-22 16:54

    Declare @variable int

    Exec @variable = proc_name

    0 讨论(0)
  • 2020-11-22 16:57
    DECLARE @vi INT
    DECLARE @vQuery NVARCHAR(1000)
    
    SET @vQuery = N'SELECT @vi= COUNT(*) FROM <TableName>'
    
    EXEC SP_EXECUTESQL 
            @Query  = @vQuery
          , @Params = N'@vi INT OUTPUT'
          , @vi = @vi OUTPUT
    
    SELECT @vi
    
    0 讨论(0)
提交回复
热议问题