如何在T-SQL中的变量中存储动态SQL结果?

时间:2014-05-13 04:39:25

标签: sql sql-server tsql sql-server-2008-r2

我有一个存储过程,其中包含'表名'作为参数。我想存储我的'exec'结果变量并使用该变量显示。 这是我的T-SQL存储过程..

create procedure  DisplayTable( @tab varchar(30))
as
begin
   Declare @Query VARCHAR(30)
   set @Query='select * from ' +@tab
   EXEC (@Query)
END

我想做这样的事情......

SET @QueryResult = EXEC (@Query)
select @QueryResult

我如何实现这一目标..请帮助..我是初学者..

3 个答案:

答案 0 :(得分:1)

您可以使用XML。只需添加例如" FOR XML AUTO"在SELECT结束时。它不是表格格式,但至少它满足您的要求,并允许您查询甚至更新结果。 SQL Server中的XML支持非常强大,只需让自己熟悉这个主题即可。你可以从这里开始:http://technet.microsoft.com/en-us/library/ms178107.aspx

答案 1 :(得分:0)

alter procedure  DisplayTable( 
    @tab varchar(30)
    ,@query varchar(max) output
)
as
BEGIN
  Declare @execution varchar(max) = 'select * from ' +@tab

    declare @tempStructure as table (
        pk_id int identity
        ,ColumnName varchar(max)
        ,ColumnDataType varchar(max)
    )

    insert into
        @tempStructure
    select
        COLUMN_NAME
        ,DATA_TYPE
    from 
        INFORMATION_SCHEMA.columns
    where TABLE_NAME= @tab

  EXEC(@execution)

  declare @ColumnCount int = (SELECT count(*) from @tempStructure)
  declare @counter int = 1
  while @counter <= @ColumnCount
  BEGIN
    IF @counter = 1
    BEGIN
        set @query = (SELECT ColumnName + ' ' + ColumnDataType FROM @tempStructure where pk_id= @counter)
    END
    IF @counter <> 1
    BEGIN
        set @query = @query +  (SELECT ',' + ColumnName + ' ' + ColumnDataType FROM @tempStructure where @counter = pk_id)
    END
    set @counter = @counter + 1
  END
END

执行SP时,您现在可以返回所需表格的结构。

这应该会让你感动。

如果您想要包含表CONTENTS,请为条目创建一个循环,并将它们附加到@query参数。

请记住分隔@query,否则当您稍后阅读时,您将无法重组您的表格。

答案 2 :(得分:0)

首先,您必须明白,您只能将SELECT的值存储在简单变量的表中。它必须是TABLE变量,可以存储SELECT查询的值。

尝试以下方法:

select 'name1' name, 12 age
into MyTable
union select 'name2', 15 union
select 'name3', 19

--declaring the table variable and selecting out of it..

declare @QueryResult table(name varchar(30), age int)
insert @QueryResult exec DisplayTable 'MyTable'
select * from @QueryResult

希望这有帮助!