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