1

나는이를 출력하는 SQL 스크립트, 테이블 이름 준 : 테이블의각 테이블에 대한 스크립트를 실행하고 결과를 SSMS 2014의 개별 CSV 파일에 저장하는 방법은 무엇입니까?

  • 열 이름을 열이 NULL 여부
  • 열 수 있습니다
  • 그 열에 대한
  • 데이터 유형 고유 한 제한 조건을 가졌는지 여부. 이처럼

:

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

은 그 때 나는 csv 파일에 스크립트의 결과를 저장하고, 그 결과 1과 다른 뭔가를 파이썬 스크립트를 실행합니다. 자, 내가하고 싶은 것은 그 과정을 자동화하는 것입니다. 데이터베이스에있는 약 2000 개의 테이블에 대해 실행중인 sql- 스크립트을 실행 한 다음 절약형 csv 파일을 실행 한 다음 running-python-script 사이클을 수행하는 것이 매우 어렵습니다.

SSMS에서이를 자동화 할 수있는 방법이 있습니까? SSMS 2014를 사용하고 있습니다. here으로 보았습니다. 그게 관련되어 있지만, 그것은 내가 원하는 것입니다.

1


내가 엔티티 프레임 워크에서 사용하는 C# 도메인 클래스를 만드는 파이썬 스크립트를 사용합니다.

+0

당신이'BCP'을 (같은 [이 문제] (http://dba.stackexchange.com/questions/23566/writing-select-result-to-a-csv-file))를 사용할 수 있습니다 쿼리 결과에서 CSV로 출력 한 다음 커서를 사용하여이 작업을 수행해야하는 테이블을 반복합니다. – 3N1GM4

+1

재사용 가능한 [Integration Servies] (https://msdn.microsoft.com/en-us/library/ms141026.aspx?f=255&MSPPError=-2147217396) 패키지를 빌드합니다. 다른 것들 중에서도, 패키지는 파이썬 스크립트를 시작할 수 있습니다. –

+0

@ destination-data 당신이 준 링크에서 나는 * SQL Server 2016 이상의 기능이지만 SQL Server 2014를 사용하고 있습니다. 정보를 제공해 주셔서 감사합니다. –

답변

0

sysobjects cursor를 사용하여 테이블의 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