Sqlserver 导出insert插入语句

SQLserver,确有些难度,自带的工具都无法完成这个操作。经过查证资料可以通过写一个存储过程来完成这个操作。

存储过程如下:

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
if exists(select 1 from sysobjects where id=object_id(‘BicashyOutputData‘) and xtype=‘P‘)
   drop procedure BicashyOutputData;
GO
create procedure dbo.BicashyOutputData(@tablename varchar(256),@whereStr varchar(256))
AS
declare @column varchar(1000)
declare @columndata varchar(1000)
declare @sql varchar(4000)
declare @xtype tinyint
declare @name sysname
declare @objectId int
declare @objectname sysname
declare @ident int  

set nocount on
set @objectId=object_id(@tablename)  

if @objectId is null -- 判斷對象是否存在
begin
print ‘The object not exists‘
return
end
set @objectname=rtrim(object_name(@objectId))  

if @objectname is null or charindex(@objectname,@tablename)=0 --此判断不严密
begin
print ‘object not in current database‘
return
end  

if OBJECTPROPERTY(@objectId,‘IsTable‘) < > 1 -- 判斷對象是否是table
begin
print ‘The object is not table‘
return
end  

select @ident=status&0x80 from syscolumns where [email protected] and status&0x80=0x80  

if @ident is not null
print ‘SET IDENTITY_INSERT ‘[email protected]+‘ ON‘  

declare syscolumns_cursor cursor

for select c.name,c.xtype from syscolumns c where [email protected] order by c.colid  

open syscolumns_cursor
set @column=‘‘
set @columndata=‘‘
fetch next from syscolumns_cursor into @name,@xtype  

while @@fetch_status < >-1
begin
if @@fetch_status < >-2
begin
if @xtype not in(189,34,35,99,98) --timestamp不需处理,image,text,ntext,sql_variant 暂时不处理  

begin
set @[email protected]+case when len(@column)=0 then‘‘ else ‘,‘[email protected]  

set @[email protected]+case when len(@columndata)=0 then ‘‘ else ‘,‘‘,‘‘,‘
end  

+case when @xtype in(167,175) then ‘‘‘‘‘‘‘‘‘+‘[email protected]+‘+‘‘‘‘‘‘‘‘‘ --varchar,char
when @xtype in(231,239) then ‘‘‘N‘‘‘‘‘‘+‘[email protected]+‘+‘‘‘‘‘‘‘‘‘ --nvarchar,nchar
when @xtype=61 then ‘‘‘‘‘‘‘‘‘+convert(char(23),‘[email protected]+‘,121)+‘‘‘‘‘‘‘‘‘ --datetime
when @xtype=58 then ‘‘‘‘‘‘‘‘‘+convert(char(16),‘[email protected]+‘,120)+‘‘‘‘‘‘‘‘‘ --smalldatetime
when @xtype=36 then ‘‘‘‘‘‘‘‘‘+convert(char(36),‘[email protected]+‘)+‘‘‘‘‘‘‘‘‘ --uniqueidentifier
else @name end  

end  

end  

fetch next from syscolumns_cursor into @name,@xtype  

end  

close syscolumns_cursor
deallocate syscolumns_cursor  

set @sql=‘set nocount on select ‘‘insert ‘[email protected]+‘(‘[email protected]+‘) values(‘‘as ‘‘--‘‘,‘[email protected]+‘,‘‘);‘‘ from ‘[email protected]+‘ ‘[email protected]  

print ‘--‘[email protected]
exec(@sql)  

if @ident is not null
print ‘SET IDENTITY_INSERT ‘[email protected]+‘ OFF‘  

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

建立好存储过程以后,可以调用存储过程查看生成好的insert 插入语句。

具体操作:

执行 exec BicashyOutputData cardinfo,‘where drawOutper="李佩娟"‘

注意cardinfo是要执行的表名,‘where drawOutper="李佩娟"‘ 是where条件,如果不需要查询条件全部导出,则可以直接写为: exec BicashyOutputData cardinfo,‘‘

还需要注意的一点就是如查询条件中含有字符串,需要在字符串前后加 “”

最后将生成的记录,全部拷贝出来即可。

时间: 2024-10-09 00:21:09

Sqlserver 导出insert插入语句的相关文章

根据MySQL表数据导出INSERT INTO语句的方法

因项目中有需要需根据MySQL表数据生成INSERT INTO语句,在网上找了些现成的代码,原作者是谁就不知道了,但是发现有BUG,不能适用,遂对他人代码进行了修改.修改后能较好的导出INSERT INTO语句.代码如下: package dwz.interaction; import java.io.*; import java.sql.*; import java.util.ArrayList; import java.util.List; /** * Update by internetr

DB2执行插入语句 57016 SQLCODE=-668 原因码 &quot;7&quot;错误的快速解决办法

DB2数据库执行insert插入语句报57016错误(表不活动) 原因:1.修改了表结构.2.删除了主键.或者修改了主键. 如果你是用的时控制台,可以使用 REORG TABLE 表名 : 如果使用工具执行上述语句后又出现42601错误可以尝试如下语句 例:CALL SYSPROC.ADMIN_CMD ('REORG TABLE test') 有人说在执行上述语句后还要执行: RUNSTATS 收集信息RUNSTATS ON TABLE   <tbschema>.<tbname>

如何将sqlserver表中的数据导出sql语句或生成insert into语句 [转]

输入表名,生成插入语句 drop proc proc_insert //如果存在就删除 go create proc proc_insert (@tablename varchar(256)) as begin set nocount on declare @sqlstr varchar(4000) declare @sqlstr1 varchar(4000) declare @sqlstr2 varchar(4000) select @sqlstr='select ''insert '[ema

SQL Server根据表或视图批量生成插入语句并BCP导出成文本

--声明变量 DECLARE @TableName VARCHAR(100),@RunStr VARCHAR(MAX),@RunRC VARCHAR(MAX),@FinalRun VARCHAR(MAX) --在master库创建数据载体,也可以建立在其他数据库,但一定要是实体表,因为BCP导出不支持临时表 IF OBJECT_ID('master.dbo.tempinsertstr') IS NOT NULL DROP TABLE master.dbo.tempinsertstr CREATE

Oracle多表插入语句Insert All/Insert First

关于INSERT ALL和INSERT FIRST 一.无条件 INSERT ALL 二.条件 INSERT ALL 三.条件 INSERT FIRST Insert-Select 使用Insert Select实现同时向多个表插入记录 一.无条件 INSERT ALL --------------------------------------------------------------------------------------------- INSERT ALL insert_in

mysql 数据库插入语句之insert into,replace into ,insert ignore

最近才发现mysql的插入语句居然有如此多的用法,这里拿来分享一下. ①关于insert into : insert into table_name values(); insert into table_name (column) values (); insert into table_name values(select (column) from table_name2); 这里的插入只需要注意一点的就是: 如果发生主键冲突,(也就是插入的主键已经在表中存在时),系统报错. ②repla

SQL INSERT INTO 语句:向表中插入新记录语法及案例剖析

SQL INSERT INTO 语句 INSERT INTO 语句用于向表中插入新记录. SQL INSERT INTO 语句 INSERT INTO 语句用于向表中插入新记录. SQL INSERT INTO 语法 INSERT INTO 语句可以有两种编写形式. 第一种形式无需指定要插入数据的列名,只需提供被插入的值即可: INSERT INTO table_name VALUES (value1,value2,value3,...); 第二种形式需要指定列名及被插入的值: INSERT I

mysql insert插入时实现如果数据表中主键重复则更新,没有重复则插入的四种方法

[CSDN下载] Powerdesigner 设计主键code不能重复等问题 [CSDN博客] Oracle中用一个序列给两个表创建主键自增功能的后果 [CSDN博客] MySQL自增主键删除后重复问题 [CSDN博客] mysql 主从复制 双主从复制原理 防止主键重复问题(必看) [CSDN博客] replace into导致mysql自增列导致主键重复问题分析 [CSDN博客] 一个循环更新某库所有表所有非主键列的值方法(sql 2005 & mysql) [CSDN博客] mysql i

oracle中复制表和数据 &amp;&amp; 多表插入语句

创建测试表和测试数据 create table test  (id number,name varchar(10));  insert into  test values(1,'liufang');  insert into  test values(2,'xiaozhang');  insert into  test values(3,'dawei');  insert into  test values(4,'laotan');  insert into  test values(5,'la