2012-08-05 70 views
0

我想从我的表中生成此类输出。其实我是想创建一个拿到表的名称和它的列(也可以从sys.tables检索) 和创造这样的输出作为一个字符串的函数或过程: imagine [tablename]有3行:将列的名称添加到我选择的结果中

Tablename (code="1",column1="Column1value",column2="Column2value",column3="Column3value") 
Tablename (code="2",column1="Column1value",column2="Column2value",column3="Column3value") 
Tablename (code="3",column1="Column1value",column2="Column2value",column3="Column3value") 
+0

您使用的是哪个数据库和版本? – 2012-08-05 10:53:53

+0

@MarkByers - 我认为它是MS-SQL(T-SQL),因为他指的是'systables' – Geoffrey 2012-08-05 10:58:53

+0

想要做这样的事情似乎没有任何错误。你有什么样的问题?你看,这个网站是关于问题和答案的。你的问题是什么? – 2012-08-05 11:11:50

回答

0

我们可以从sys表中获取传入表名的列名,然后为每一行打印表值,我们可以使用ROW_NUMBER并通过为每行添加列值来获得最终输出来打印字符串。会有为每个循环嵌套。外部foreach循环将使用ROW_NYMBER,并将针对表中的所有行执行,并且内部循环将根据需要在一个字符串中打印列值。

+0

谢谢。但你能给我的例子查询 – Ehsan 2012-08-06 08:40:15

0

尝试此过程以获得所需格式的结果。

CREATE Procedure GetTableValues(@tblname varchar(10)) 
As 
BEGIN 
DECLARE @idmin int,@idmax int,@colCnt int,@i int 
DECLARE @outtbl TABLE(col1 varchar(1000)) 
DECLARE @tblval TABLE(col1 varchar(1000)) 
DECLARE @str varchar(1000),@colname varchar(100),@colvalue sql_variant 
SET @str='' 
SET @i=1 
select @colCnt=COUNT(*) from sys.columns where object_id=object_id(@tblname) 

IF EXISTS(select * from sys.tables where name='temp') 
DROP TABLE temp 
EXEC('select ROW_NUMBER() over (order by (select 0)) as rno,* into temp from '[email protected]) 

select @idmin=MIN(rno),@idmax=MAX(rno) from temp 

while(@idmin <[email protected]) 
begin 
while(@i <[email protected]) 
begin 
select @colname=name from sys.columns where [email protected] and object_id=object_id(@tblname) 
insert into @tblval 
exec('select '[email protected]+' from temp where rno='[email protected]) 
select @colvalue=col1 from @tblval 
SET @[email protected]+','[email protected]+'="'+cast(@colvalue as varchar)+'"' 
SET @[email protected]+1 
end 
insert into @outtbl 
select @tblname+'('+STUFF(@str,1,1,'')+')' 
SET @[email protected]+1 
SET @i=1 
SET @str='' 
end 
select * from @outtbl 
END 


exec GetTableValues 'test7' 
+0

没有多数民众赞成在答案我需要一个循环内部表'test2'的记录,为每一行创建sunch字符串:'(code =“1”,column1 =“Column1value ”,列2 = “Column2value”,栏3 = “Column3value”)” – Ehsan 2012-08-06 09:59:23

相关问题