tsql生成mysql ,mssql insert语句办法,实现全脚数据迁移

 
go
IF object_id('get_sqls') IS NOT NULL
BEGIN 
	PRINT 'Dropping function get_sqls'
	DROP FUNCTION get_sqls
	IF @@ERROR = 0 PRINT 'Function get_sqls dropped'
END
go

CREATE FUNCTION get_sqls
/***********************************************************
* Function description:
* Date:   2016/12/27  
* Author: systemadmin
*
* Changes
* Date		Modified By			Comments
************************************************************
*
************************************************************/
(
	@tableName NVARCHAR(100),@schema nvarchar(10),@target_tbl NVARCHAR(100),@dbtype nvarchar(10)='MSSQL'
) 
RETURNS @tab table(str_sql VARCHAR(8000))
BEGIN
	DECLARE @Cols VARCHAR(8000)
	,@Cols1 VARCHAR(8000)
	,@sql nvarchar(4000)
	,@odr_col nvarchar(100)
	,@v_quota nvarchar(2)
	,@c_quota nvarchar(2)
	,@end nvarchar(2)

select @c_quota=case when @dbtype='MSSQL' then '' when  @dbtype='MYSQL' then '`' else '"' end
	  ,@v_quota=case when @dbtype='MSSQL' then '''''' when  @dbtype='MYSQL' then '"' else '' end
	  ,@end=case when @dbtype='MSSQL' then 'go' when  @dbtype='MYSQL' then ';' else 'go' end
SELECT @Cols=COALESCE(@Cols + ', ','')+@c_quota+ c.[COLUMN_NAME] +@c_quota,
@Cols1 = COALESCE(@Cols1 + ','','', ','') + 
CASE  
	WHEN c.DATA_TYPE='float' THEN  ''''+@v_quota+'''+CAST( cast(' + c.[COLUMN_NAME] + ' as decimal(18,2))) AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE like 'date%' THEN  ''''+@v_quota+'''+CONVERT(varchar(100),' + c.[COLUMN_NAME] + ', 25)+ '''+@v_quota+''''
	WHEN  c.DATA_TYPE like '%varchar%' THEN  ''''+@v_quota+'''+replace(' + c.[COLUMN_NAME] +','''+@v_quota+ ''','''')+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''
	WHEN c.DATA_TYPE='' THEN  ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+''''	
	ELSE ''''+@v_quota+'''+CAST(' + c.[COLUMN_NAME] + ' AS VARCHAR(8000))+ '''+@v_quota+'''' END 
FROM [INFORMATION_SCHEMA].[COLUMNS] c
WHERE c.[TABLE_NAME] = @tableName AND c.[TABLE_SCHEMA] = @schema
ORDER BY c.[ORDINAL_POSITION] ASC 
select top 1 @odr_col= c.[COLUMN_NAME]  FROM [INFORMATION_SCHEMA].[COLUMNS] c
WHERE c.[TABLE_NAME] = @tableName AND c.[TABLE_SCHEMA] = @schema
SET @sql = N'SELECT   ' + char(10)
         + N'case when  row_number()over (order by '+@odr_col+')%10 =1 then '''+@end+'''+char(10)+char(13)+'' insert into '+@target_tbl+' ('+@Cols+') values ('' ' + char(10)
         + N'else '',('' end ' + char(10)
        -- + N', ''"''+CAST(item_no AS VARCHAR(8000))+ ''"'','','', ''"''+CAST(cls_no_s AS VARCHAR(8000))+ ''"'','','', ''"''+CAST(cls_no_b AS VARCHAR(8000))+ ''"'','','', ''"''+CAST(unit_factor AS VARCHAR(8000))+ ''"'','','', ''"''+CAST(last_oper AS VARCHAR(8000))+ ''"'','','', ''"''+CAST(last_date AS VARCHAR(8000))+ ''"'' ' + char(10)
         + N','+@cols1  + char(10)
         + N','')'' FROM ['+@schema+'].['+@tableName+']  ' + char(10)
         + N' '
 --PRINT @sql
--SELECT @Cols,@Cols1
	INSERT INTO @tab SELECT @sql
	
	RETURN 
END
GO

--SELECT * FROM dbo.get_sqls('OOS_master_item_info','dbo','OOS_master_item_info','MYSQL')
 go


 
SELECT * FROM dbo.get_sqls('FmsOrderDetail','dbo','FmsOrderDetail','MYSQL')
 go


  1. 用sqlcmd output到.sql文件,call loaddata.bat将数据加载到mysql载sql server.
  2. 通过修改case when的条件来实现支持数据类型转换

猜你喜欢

转载自blog.csdn.net/wangzhpwang/article/details/53894086