与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.?'')
答案 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(''?''))'