SQL Server:将所有表的所有列详细信息输出到文件中

时间:2016-04-06 16:43:46

标签: sql-server sqlcmd

previous question相关的排序:

我想输出SQL Server数据库中所有表的所有列详细信息的列表。这,使用sys.columns中的数据。所以我开始使用类似的东西:

use mydb
EXECUTE sp_MSforeachtable
    'EXECUTE master.dbo.xp_cmdshell ''sqlcmd -S MYPC\SQLEXPRESS -E -d mydb -q "select * from sys.columns where object_id = object_id(?)" -W -o C:\TEMP\?.txt -s"|"'''

我甚至尝试用where object_id = object(''mydb.?'')

替换where子句

1 个答案:

答案 0 :(得分:0)

尝试使用INFORMATION_SCHEMA.COLUMNS而不是SYS.COLUMNS

SELECT 
    TABLE_CATALOG,
    TABLE_SCHEMA,
    TABLE_NAME,
    COLUMN_NAME,
    DATA_TYPE,
    CHARacter_maximum_length 'Max Length'
FROM INFORMATION_SCHEMA.columns
GO 

还有其他专栏,但这些专栏将帮助您入门。

您也可以尝试使用osql(Link)从Windows命令行运行命令。

EX :(将MASTER替换为您的数据库名称,并指定您要使用的查询而不是表格查询。

osql -E -S . -d MASTER -q "SELECT NAME FROM SYS.TABLES" -o tables.txt

更新1:

如果您在从sp_MSforeachtable命令中删除架构时遇到问题,请尝试:

exec sp_MSforeachtable @command1 = 'select * from INFORMATION_SCHEMA.columns where 
table_name = REPLACE(REPLACE(''?'',''[dbo].['',''''),'']'','''')'

这将只给你一个没有[dbo]的表名。和后面的括号。

更新2:

如果你想使用object_id,你可以试试这个:

exec sp_MSforeachtable @command1 = 'select * from sys.columns
where object_id = (SELECT OBJECT_ID(''?''))'