1

テーブル名を指定して、これらを出力するSQLスクリプトがあります。

  • テーブル内の列名
  • それらの列のデータ型
  • 列が許可するNULLかどうか
  • 列にユニーク制約があるかどうか。

このような:

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

次に、スクリプトの結果を csv ファイルに保存し、python スクリプトを実行して、結果1を使用して別のことを行います。今、私がやりたいことは、プロセスを自動化することです。データベース内の約 2000 のテーブルの場合、これら 2000 のテーブルのそれぞれに対して、running-sql-scriptsave-to-csv-filerunning-python-script のサイクルを実行するのは非常に面倒です。

SSMS でこれを自動化する方法はありますか。私はSSMS 2014を使用しています。ここを見ました。それは関連していますが、実際には私が望んでいるものではありません。


1. Python スクリプトを使用して、エンティティ フレームワークで使用される C# ドメイン クラスを作成します。

4

1 に答える 1

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
于 2016-12-08T14:24:25.910 に答える