2011-02-08 80 views
4

在SQL Server中,我希望看到Table_Name以及與該Table_Name在數據庫中關聯的所有列。所以輸出應該是這樣的:逗號分隔數據庫中所有列的列表(Tablename | Column_names ...)

 TABLE_NAME  COLUMN_NAME 

    1. Employee  Employee-id, Lastname, Firstname, Title........... 
    2. Orders   Orderid, Order-date, shipped-date, delivery-date....... 
    3. Products  Product-id, Product-name, supplier-id, category-id..... 
    4. Suppliers  Supplier-id, Company-name, contact-name....... 
    5. ............................................................ 
    6. ................................................... 
     (So on....) 

是否有可能通過WHILE LOOP或其他方式獲得上述結果?如果是,您可以發佈代碼嗎?

而且,我試圖用一個臨時表做到這一點的問題:

create table #hello 
(table_name1 Varchar(max)) 
    insert into #hello(table_name1) 
    select table_name from information_schema.columns 
GO 

create table #hello2 
(table_name2 varchar(max),column_name2 varchar(max)) 
    insert into #hello2(table_name2 ,column_name2) 
    select table_name,column_name from information_schema.columns 
GO 

select a.table_name1,b.column_name from #hello a inner join 
    information_schema.columns b 
on a.table_name1=b.table_name COLLATE Latin1_general_CI_AS 
order by table_name 
GO  

我在垂直列出列是成功的,但我不能讓列逗號分隔的列表。

+2

我們沒有建立它。 – 2011-02-08 18:10:43

+2

@OMG小馬:我不明白爲什麼不。如果他們給出了一個有趣的問題,並且你可以用「這是你怎麼做的:<代碼片段>」來回答,那你爲什麼不呢?我知道它可以幫助我學習如何做一些事情來查看我的問題域的相關示例。 並非所有的用戶都可能想爲其他用戶構建查詢,但我不知道爲什麼要嘗試爲社區發言並說「我們不這樣做」。我個人喜歡通過提供查詢他們正在處理的問題來幫助人們。 (對不起長段落,我不知道如何輸入換行符......) – 2011-02-08 23:47:12

+1

@Jeremy Pridemore,爲什麼我應該試圖幫助那些希望我能夠完成他所付出的工作的人?有人應該表明,他們至少已經嘗試過或者在問他們需要知道什麼,開始嘗試不直接要求完成的代碼以供其他人編寫。 – HLGEM 2011-02-09 16:37:19

回答

13
Select TABLE_SCHEMA, TABLE_NAME 
    , Stuff(
     (
     Select ', ' + C.COLUMN_NAME 
     From INFORMATION_SCHEMA.COLUMNS As C 
     Where C.TABLE_SCHEMA = T.TABLE_SCHEMA 
      And C.TABLE_NAME = T.TABLE_NAME 
     Order By C.ORDINAL_POSITION 
     For Xml Path('') 
     ), 1, 2, '') As Columns 
From INFORMATION_SCHEMA.TABLES As T 

正如在評論中提到的,以上內容將包含意見。如果要排除的觀點,你可以做到以下幾點:

Select T.TABLE_SCHEMA, T.TABLE_NAME 
    , Stuff(
     (
     Select ', ' + C.COLUMN_NAME 
     From INFORMATION_SCHEMA.COLUMNS As C 
     Where C.TABLE_SCHEMA = T.TABLE_SCHEMA 
      And C.TABLE_NAME = T.TABLE_NAME 
     Order By C.ORDINAL_POSITION 
     For Xml Path('') 
     ), 1, 2, '') As Columns 
From INFORMATION_SCHEMA.TABLES As T 
    Left Join INFORMATION_SCHEMA.VIEWS As V 
     On V.TABLE_SCHEMA = T.TABLE_SCHEMA 
      And V.TABLE_NAME = T.TABLE_NAME 
Where V.TABLE_NAME Is Null 
4
select name as TABLE_NAME, 
     STUFF(COLUMN_NAME, 1, 1, '') AS COLUMN_NAME 
from sys.tables t 
CROSS APPLY 
( 
     SELECT 
      ',' + name AS [text()] 
     FROM 
      sys.columns c 
     WHERE 
      c.object_id = t.object_id 
     FOR XML PATH('') 
    ) o (COLUMN_NAME)