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")
4

2 に答える 2

0

渡されたテーブル名の列名をsysテーブルから取得し、各行のテーブル値を出力するには、ROW_NUMBERを使用し、各行の列値を追加して文字列を出力し、最終出力を取得します。ネストされたループごとにToがあります。外側のforeachループはROW_NYMBERを使用し、テーブル内のすべての行に対して実行され、内側のループは必要に応じて1つの文字列に列の値を出力します。

于 2012-08-05T17:45:15.110 に答える
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 '+@tblname)

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

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


exec GetTableValues 'test7'
于 2012-08-06T09:18:26.327 に答える