How to get sp_executesql result into a variable?

后端 未结 10 1430
刺人心
刺人心 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 17:06

    Here's something you can try

    DECLARE  @SqlStatement  NVARCHAR(MAX) = ''
           ,@result     XML
           ,@DatabaseName  VARCHAR(100)
           ,@SchemaName    VARCHAR(10)
           ,@ObjectName    VARCHAR(200);
    
    SELECT   @DatabaseName = 'some database'
           ,@SchemaName   = 'some schema'
           ,@ObjectName   = 'some object (Table/View)'
    
    SET @SqlStatement = '
                        SELECT @result = CONVERT(XML,
                                                STUFF( ( SELECT *
                                                         FROM 
                                                           (
                                                              SELECT TOP(100) 
                                                              * 
                                                              FROM ' + QUOTENAME(@DatabaseName) +'.'+ QUOTENAME(@SchemaName) +'.' + QUOTENAME(@ObjectName) + '
                                                           ) AS A1 
                                                        FOR XML PATH(''row''), ELEMENTS, ROOT(''recordset'')
                                                     ), 1, 0, '''')
                                           )
                    ';
    
    EXEC sp_executesql @SqlStatement,N'@result XML OUTPUT', @result = @result OUTPUT;
    
    SELECT DISTINCT
        QUOTENAME(r.value('fn:local-name(.)', 'VARCHAR(200)')) AS ColumnName
    FROM @result.nodes('//recordset/*/*') AS records(r)
    ORDER BY ColumnName
    

提交回复
热议问题