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
- 用sqlcmd output到.sql文件,call loaddata.bat将数据加载到mysql载sql server.
- 通过修改case when的条件来实现支持数据类型转换