如何为每个表运行脚本并将结果保存到SSMS 2014中的单独CSV文件中?

时间:2016-12-08 09:56:05

标签: sql-server ssms sql-server-2014 management-studio-express

我有一个SQL脚本,在给定表名的情况下输出这些:

  • 表格中的列名称
  • 这些列的数据类型
  • 该列允许NULL或不允许
  • 该列是否具有唯一约束。

像这样:

column | datatype | nullable | unique
--------------------------------------
       |          |          |
       |          |          |
       |          |          |

然后我将脚本的结果保存到csv文件中,并运行python脚本以使用结果 1 执行其他操作。现在,我想要做的是自动化流程。对于数据库中的大约2000个表,执行 running-sql-script 然后保存到csv文件然后 running-python是非常笨拙的这些2000个表中每个表的-script 循环。

有没有办法在SSMS中自动执行此操作。我正在使用SSMS 2014.我看过here。虽然这是相关的,但实际上并不是我想要的。

1。我使用python脚本创建一个供实体框架使用的C#域类。

1 个答案:

答案 0 :(得分:0)

您可以使用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