如何为包含所有存储行的现有SQL Server表生成INSERT脚本?

我正在寻找一种方法来使用SQL Management Studio 2008 R2生成“创build并插入所有行”脚本。

我知道我可以创build一个“创build表”脚本。

我也可以创build一个“插入”脚本,但是这只会产生一个占位符的单行。

有没有办法生成一个包含所有当前存储行的插入脚本?

是的,但是您需要在数据库级别运行它。

右键单击SSMS中的数据库,select“任务”,“生成脚本…”。 在您完成之后,您将看到“脚本选项”部分。 点击“高级”,在popup的列表中,在“脚本数据types”的地方,可以select数据和/或模式。

高级脚本选项的屏幕截图

该脚本生成您现有数据的插入语句。 这是一个需要运行一次的存储过程,然后是为您量身定做的。

我试图find这种东西一段时间,但不满意的结果,所以我写了这个存储过程。

例:

Exec [dbo].[INS] 'Dbo.test where 1=1' 

(1)这里dbo是schema,test是表名, 1=1是条件。

 Exec [dbo].[INS] 'Dbo.test where name =''neeraj''' * for string 

(2)这里dbo是schema,test是tablename, name='neeraj'是条件。

这里是存储过程

 /* Authore : neeraj prasad sharma (please dont remove this :)) Example (1) Exec [dbo].[INS] 'Dbo.test where 1=1' (2) Exec [dbo].[INS] 'Dbo.test where name =''neeraj''' * for string here Dbo is schema and test is tablename and 1=1 is condition */ CREATE procedure [dbo].[INS] ( @Query Varchar(MAX) ) AS SET nocount ON DECLARE @WithStrINdex as INT DECLARE @WhereStrINdex as INT DECLARE @INDExtouse as INT DECLARE @SchemaAndTAble VArchar(270) DECLARE @Schema_name varchar(30) DECLARE @Table_name varchar(240) DECLARE @Condition Varchar(MAX) SET @WithStrINdex=0 SELECT @WithStrINdex=CHARINDEX('With',@Query ) , @WhereStrINdex=CHARINDEX('WHERE', @Query) IF(@WithStrINdex!=0) SELECT @INDExtouse=@WithStrINdex ELSE SELECT @INDExtouse=@WhereStrINdex SELECT @SchemaAndTAble=Left (@Query,@INDExtouse-1) SELECT @SchemaAndTAble=Ltrim (Rtrim( @SchemaAndTAble)) SELECT @Schema_name= Left (@SchemaAndTAble, CharIndex('.',@SchemaAndTAble )-1) , @Table_name = SUBSTRING( @SchemaAndTAble , CharIndex('.',@SchemaAndTAble )+1,LEN(@SchemaAndTAble) ) , @CONDITION=SUBSTRING(@Query,@WhereStrINdex+6,LEN(@Query))--27+6 DECLARE @COLUMNS table (Row_number SmallINT , Column_Name VArchar(Max) ) DECLARE @CONDITIONS as varchar(MAX) DECLARE @Total_Rows as SmallINT DECLARE @Counter as SmallINT DECLARE @ComaCol as varchar(max) SELECT @ComaCol='' SET @Counter=1 SET @CONDITIONS='' INSERT INTO @COLUMNS SELECT Row_number()Over (Order by ORDINAL_POSITION ) [Count], Column_Name FROM INformation_schema.columns WHERE Table_schema=@Schema_name AND table_name=@Table_name SELECT @Total_Rows= Count(1) FROM @COLUMNS SELECT @Table_name= '['+@Table_name+']' SELECT @Schema_name='['+@Schema_name+']' While (@Counter<=@Total_Rows ) begin --PRINT @Counter SELECT @ComaCol= @ComaCol+'['+Column_Name+'],' FROM @COLUMNS WHERE [Row_number]=@Counter SELECT @CONDITIONS=@CONDITIONS+ ' + Case When ['+Column_Name+'] is null then ''Null'' Else '''''''' + Replace( Convert(varchar(Max),['+Column_Name+'] ) ,'''''''','''' ) +'''''''' end+'+''',''' FROM @COLUMNS WHERE [Row_number]=@Counter SET @Counter=@Counter+1 End SELECT @CONDITIONS=Right(@CONDITIONS,LEN(@CONDITIONS)-2) SELECT @CONDITIONS=LEFT(@CONDITIONS,LEN(@CONDITIONS)-4) SELECT @ComaCol= substring (@ComaCol,0, len(@ComaCol) ) SELECT @CONDITIONS= '''INSERT INTO '+@Schema_name+'.'+@Table_name+ '('+@ComaCol+')' +' Values( '+'''' + '+'+@CONDITIONS SELECT @CONDITIONS=@CONDITIONS+'+'+ ''')''' SELECT @CONDITIONS= 'Select '+@CONDITIONS +'FRom ' +@Schema_name+'.'+@Table_name+' With(NOLOCK) ' + ' Where '+@Condition print(@CONDITIONS) Exec(@CONDITIONS) 

是的,使用商业但廉价的SSMS工具包插件 ,它有一个漂亮的“从结果集,表或数据库生成插入语句”function