【问题标题】:add columns names to the result of my select from text将列名添加到我从文本中选择的结果中
【发布时间】:2012-08-05 10:52:12
【问题描述】:

我想从我的表中产生这样的输出。事实上,我想创建一个函数或过程来获取表及其列的名称(也可以从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")

【问题讨论】:

  • 您使用的是什么数据库和版本?
  • @MarkByers - 我相信这是 MS-SQL (T-SQL),因为他指的是“系统表”
  • 想做这样的事情似乎没有什么问题。你有什么样的问题?你看,这个网站是关于问题和答案的。 你的问题是什么?
  • @Geoffrey:这也是我的猜测,但我不确定是否还有其他数据库也使用系统表,例如 DB2。无论如何,如果数据库和版本取决于数据库的特定功能,我认为最好指定数据库和版本。
  • @AndriyM 我想知道我该怎么做?!!!您知道每个表的名称和编号都有不同的列,因此 SP 应该处理它。另一方面,每个表的列名称是动态不同的

标签: sql sql-server-2008-r2 bibtex bibliography


【解决方案1】:

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

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'

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 2014-04-21
      相关资源
      最近更新 更多