我有一个存储过程,其中包含'表名'作为参数。我想存储我的'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
我如何实现这一目标..请帮助..我是初学者..
答案 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
希望这有帮助!