SQL 服务器:将所有表的所有列详细信息输出到一个文件中

SQL Server: output all column details for all tables into a file

有点和我的有关 :

我想输出 SQL 服务器数据库中所有表的所有列详细信息的列表。这使用来自 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 子句

尝试使用 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 替换为您的数据库名称并指定您要使用的查询而不是 tables 查询。

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] 的 table 名称。和后括号。

更新二:

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

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