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

  

你可能感兴趣的:(存储过程)