wfcfan

SQL 导出表数据存储过程

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- ============================================= 
-- Author: 
-- Create date:
-- Description: 将表数据生成Insert脚本 
-- Demo : exec pCreateInsertScript \'TestTable\',\'1=1\' 
-- ============================================= 
CREATE PROC [dbo].[pCreateInsertScript] (
	@tablename VARCHAR(256)
	,@con NVARCHAR(400)
	)
AS
BEGIN
	SET NOCOUNT ON

	DECLARE @sqlstr VARCHAR(4000)
	DECLARE @sqlstr1 VARCHAR(4000)
	DECLARE @sqlstr2 VARCHAR(4000)

	SELECT @sqlstr = \'select \'\'insert \' + @tablename

	SELECT @sqlstr1 = \'\'

	SELECT @sqlstr2 = \'(\'

	SELECT @sqlstr1 = \'values (\'\'+\'

	SELECT @sqlstr1 = @sqlstr1 + col + \'+\'\',\'\'+\'
		,@sqlstr2 = @sqlstr2 + NAME + \',\'
	FROM (
		SELECT CASE 
				WHEN a.xtype = 173
					THEN \'case when \' + a.NAME + \' is null then \'\'NULL\'\' else \' + \'convert(varchar(\' + convert(VARCHAR(4), a.length * 2 + 2) + \'),\' + a.NAME + \')\' + \' end\'
				WHEN a.xtype = 104
					THEN \'case when \' + a.NAME + \' is null then \'\'NULL\'\' else \' + \'convert(varchar(1),\' + a.NAME + \')\' + \' end\'
				WHEN a.xtype = 175
					THEN \'case when \' + a.NAME + \' is null then \'\'NULL\'\' else \' + \'\'\'\'\'\'\'\'\'+\' + \'replace(\' + a.NAME + \',\'\'\'\'\'\'\'\',\'\'\'\'\'\'\'\'\'\'\'\')\' + \'+\'\'\'\'\'\'\'\'\' + \' end\'
				WHEN a.xtype = 61
					THEN \'case when \' + a.NAME + \' is null then \'\'NULL\'\' else \' + \'\'\'\'\'\'\'\'\'+\' + \'convert(varchar(23),\' + a.NAME + \',121)\' + \'+\'\'\'\'\'\'\'\'\' + \' end\'
				WHEN a.xtype = 106
					THEN \'case when \' + a.NAME + \' is null then \'\'NULL\'\' else \' + \'convert(varchar(\' + convert(VARCHAR(4), a.xprec + 2) + \'),\' + a.NAME + \')\' + \' end\'
				WHEN a.xtype = 62
					THEN \'case when \' + a.NAME + \' is null then \'\'NULL\'\' else \' + \'convert(varchar(23),\' + a.NAME + \',2)\' + \' end\'
				WHEN a.xtype = 56
					THEN \'case when \' + a.NAME + \' is null then \'\'NULL\'\' else \' + \'convert(varchar(11),\' + a.NAME + \')\' + \' end\'
				WHEN a.xtype = 60
					THEN \'case when \' + a.NAME + \' is null then \'\'NULL\'\' else \' + \'convert(varchar(22),\' + a.NAME + \')\' + \' end\'
				WHEN a.xtype = 239
					THEN \'case when \' + a.NAME + \' is null then \'\'NULL\'\' else \' + \'\'\'\'\'\'\'\'\'+\' + \'replace(\' + a.NAME + \',\'\'\'\'\'\'\'\',\'\'\'\'\'\'\'\'\'\'\'\')\' + \'+\'\'\'\'\'\'\'\'\' + \' end\'
				WHEN a.xtype = 108
					THEN \'case when \' + a.NAME + \' is null then \'\'NULL\'\' else \' + \'convert(varchar(\' + convert(VARCHAR(4), a.xprec + 2) + \'),\' + a.NAME + \')\' + \' end\'
				WHEN a.xtype = 231
					THEN \'case when \' + a.NAME + \' is null then \'\'NULL\'\' else \' + \'\'\'\'\'\'\'\'\'+\' + \'replace(\' + a.NAME + \',\'\'\'\'\'\'\'\',\'\'\'\'\'\'\'\'\'\'\'\')\' + \'+\'\'\'\'\'\'\'\'\' + \' end\'
				WHEN a.xtype = 59
					THEN \'case when \' + a.NAME + \' is null then \'\'NULL\'\' else \' + \'convert(varchar(23),\' + a.NAME + \',2)\' + \' end\'
				WHEN a.xtype = 58
					THEN \'case when \' + a.NAME + \' is null then \'\'NULL\'\' else \' + \'\'\'\'\'\'\'\'\'+\' + \'convert(varchar(23),\' + a.NAME + \',121)\' + \'+\'\'\'\'\'\'\'\'\' + \' end\'
				WHEN a.xtype = 52
					THEN \'case when \' + a.NAME + \' is null then \'\'NULL\'\' else \' + \'convert(varchar(12),\' + a.NAME + \')\' + \' end\'
				WHEN a.xtype = 122
					THEN \'case when \' + a.NAME + \' is null then \'\'NULL\'\' else \' + \'convert(varchar(22),\' + a.NAME + \')\' + \' end\'
				WHEN a.xtype = 127
					THEN \'case when \' + a.NAME + \' is null then \'\'NULL\'\' else \' + \'convert(varchar(6),\' + a.NAME + \')\' + \' end\'
				WHEN a.xtype = 48
					THEN \'case when \' + a.NAME + \' is null then \'\'NULL\'\' else \' + \'convert(varchar(6),\' + a.NAME + \')\' + \' end\'
				WHEN a.xtype = 165
					THEN \'case when \' + a.NAME + \' is null then \'\'NULL\'\' else \' + \'convert(varchar(\' + convert(VARCHAR(4), a.length * 2 + 2) + \'),\' + a.NAME + \')\' + \' end\'
				WHEN a.xtype = 167
					THEN \'case when \' + a.NAME + \' is null then \'\'NULL\'\' else \' + \'\'\'\'\'\'\'\'\'+\' + \'replace(\' + a.NAME + \',\'\'\'\'\'\'\'\',\'\'\'\'\'\'\'\'\'\'\'\')\' + \'+\'\'\'\'\'\'\'\'\' + \' end\'
				ELSE \'\'\'NULL\'\'\'
				END AS col
			,a.colid
			,a.NAME
		FROM syscolumns a
		WHERE a.id = object_id(@tablename)
			AND a.xtype <> 189
			AND a.xtype <> 34
			AND a.xtype <> 35
			AND a.xtype <> 36
		) t
	ORDER BY colid

	SELECT @sqlstr = @sqlstr + left(@sqlstr2, len(@sqlstr2) - 1) + \') \' + left(@sqlstr1, len(@sqlstr1) - 3) + \');\'\' from \' + @tablename + \' where 1=1 and \' + isnull(@con, \'\')

	PRINT @sqlstr

	EXEC (@sqlstr)

	SET NOCOUNT OFF
END
GO

  

分类:

技术点:

相关文章: