我有一个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#域类。
答案 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