您可以使用 sysobjects 游标收集表的 id 并运行 bcp 实用程序将结果导出到 CSV 表。这是我为这项工作编写的脚本。
DECLARE @TableID int
DECLARE @TableName varchar(100)
DECLARE @sql_command varchar(4000)
DECLARE @bulk_cmd varchar(4000)
DECLARE @DatabaseName varchar(100) ='AdventureWorks2012'
DECLARE @SQLServerName varchar(100) ='CEMUNEY\S12'
DECLARE Cursor_Line CURSOR FOR
SELECT id,name FROM sys.sysobjects where type='U'
OPEN Cursor_Line
FETCH NEXT FROM Cursor_Line INTO @TableID, @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql_command = N'SELECT [column] = cols.name ,[datatype] = typeuser.name ,is_nullable ,is_identity FROM @DatabaseName.sys.columns cols INNER JOIN @DatabaseName.sys.systypes datatypes ON cols.user_type_id = datatypes.xusertype LEFT OUTER JOIN @DatabaseName.sys.systypes typeuser ON datatypes.xtype = typeuser.xusertype where object_id =' + STR(@TableID)
SET @sql_command = REPLACE(@sql_command, '@DatabaseName', @DatabaseName)
set @bulk_cmd = 'SQLCMD -S @SQLServerName -W -E -q "set nocount on;' + @sql_command + '" -s "," -o "D:\' + @TableName + '.csv"'
SET @bulk_cmd = REPLACE(@bulk_cmd, '@SQLServerName', @SQLServerName)
exec xp_cmdshell @bulk_cmd
FETCH NEXT FROM Cursor_Line INTO @TableID, @TableName
END
CLOSE Cursor_Line
DEALLOCATE Cursor_Line