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(''?''))'
有点和我的有关
我想输出 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.?'')
尝试使用 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(''?''))'