Cri*_*Man 9 sql t-sql sql-server sql-server-2005 while-loop
在SQL Server中,我希望在数据库中看到Table_Name和与该Table_Name关联的所有列.所以输出应该如下所示:
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....)
Run Code Online (Sandbox Code Playgroud)
是否有可能通过WHILE LOOP或任何其他方式获得上述结果?如果是,您可以发布代码.
另外,我尝试使用Temp Table来解决这个问题:
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
Run Code Online (Sandbox Code Playgroud)
我成功列出了垂直列但我无法得到逗号分隔的列列表.
Tho*_*mas 21
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
Run Code Online (Sandbox Code Playgroud)
如评论中所述,上述内容将包含观点.如果要排除视图,可以执行以下操作:
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
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)