自动生成insert数据的SQL脚本

判断当表存在标识列的时候就要允许将显式值插入表的标识列中,设置:

Set Identity_insert TableName Off

判断数据类型:

如,varchar,char,datetime,nvarchar,nchar,uniqueidentifier时候,在insert字段中就要增加双引号,否则就不加。

Use TestGoDeclare        @Table1 nvarchar(128),        @Table2 nvarchar(128),        @Sql1 nvarchar(4000),        @Sql2 nvarchar(4000),        @SqlIdentityInsert nvarchar(512)Set @Table1='DutyHistory'    --源表Set @Table2='Duty'            --目标表IF Object_id(@Table1,'U') Is Null    ReturnIf Isnull(@Table2,'')=''    Set @Table2=@Table1Set @SqlIdentityInsert=''If Exists(Select 1 From sys.columns Where Object_id=Object_id(@Table1,'U'))    Set @SqlIdentityInsert='Select ''Set Identity_Insert '+@Table2+' On '''Select    @Sql1=Isnull(@Sql1+',',' Insert Into '+@Table2+' (')+Quotename(name),    @Sql2=Isnull(@Sql2+'+'',''+','Select @Sql1+'' Select ''')+'+Case When '+Quotename(name)+' Is null Then ''null'' Else '+            Case When user_type_id In(175,61,239,231,58,98,36,167,241) Then '''''''''+Rtrim('+Quotename(name)+')+''''''''' Else 'Rtrim('+Quotename(name)+')' End +' End'From sys.columnsWhere Object_id=Object_id(@Table1,'U')Set @Sql1=@Sql1+')'Set @Sql2=    'Select Convert(nvarchar(max),''If Object_id('''''+@Table2+''''',''''U'''') Is Null Return;'') As SqlInsert  Union All '+            @SqlIdentityInsert+' Union All '+            @Sql2+' From '+Quotename(@Table1)+Case @SqlIdentityInsert When '' Then '' Else ' Union All ' End+            Replace(@SqlIdentityInsert,' On ',' Off')Exec sp_executesql @Sql2,N'@Sql1 nvarchar(4000)',@Sql1

Result:

SqlInsert
---------------------------------------------------------
If Object_id('Duty','U') Is Null Return;
Set Identity_Insert Duty On
Insert Into Duty ([id],[Name],[WorkDate],[WorkHours]) Select 1,'Robert','01 1 2008 12:00AM',3.4
Insert Into Duty ([id],[Name],[WorkDate],[WorkHours]) Select 2,'Robert','01 2 2008 12:00AM',3.4
Insert Into Duty ([id],[Name],[WorkDate],[WorkHours]) Select 3,'Robert','01 3 2008 12:00AM',3.4
... ...
Insert Into Duty ([id],[Name],[WorkDate],[WorkHours]) Select 58,'Robert','02 27 2008 12:00AM',4.5
Insert Into Duty ([id],[Name],[WorkDate],[WorkHours]) Select 59,'Robert','02 28 2008 12:00AM',4.5
Insert Into Duty ([id],[Name],[WorkDate],[WorkHours]) Select 60,'Robert','02 29 2008 12:00AM',4.5
Set Identity_Insert Duty Off

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索sql
, insert
, select
, table
, nvarchar
, 显式值
IDENTITY_INSERT
自动生成sql 建表脚本、sql 生成insert语句、自动生成insert语句、sql server 生成脚本、java生成sql脚本,以便于您获取更多的相关知识。

时间: 2024-11-08 23:22:12

自动生成insert数据的SQL脚本的相关文章

根据数据库自动生成INSERT/UPDATE更新语句

数据|数据库|语句 在编写程序中,写添加和更新SQL语句是一个比较烦琐的过程,特别是在表结构比较复杂的时候这个程序主要是根据数据表格式自动生成添加/更新的SQL语句,然后由程序员直接加入到程序中,方便编程 下面是文件,方法建立一个单独的文件,按照下面的说明建立相关文件,运行即可index.php     索引文件config.php    配置文件,转换get/post数据addxxx.php    根据提交表格数据生成SQL语句addxxx2.php    根据数据库表信息生成SQL语句,配置

将表数据生成Insert脚本 比较好用的生成插入语句的SQL脚本

复制代码 代码如下:set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go -- ============================================= -- Author: 华岭 -- Create date: 2008-10-28 -- Description: 将表数据生成Insert脚本 -- Demo : exec pCreateInsertScript 'BexmCodeType','dictypeid = 61' -- ===

SQL Server 开发之 复制表数据的SQL脚本生成器

server|脚本|数据 使用SQL Server 2000自带的"生成SQL脚本"工具,可以生成创建表.视图.存储过程等的SQL脚本.那么,能否将表中的数据也生成为SQL脚本,在查询分析器中执行这些脚本后自动将数据导入到SQL Server中呢?答案是肯定的.下面的存储过程是一位高人写的,这位高人的姓氏已无人知晓,但SQL Server社区中偶尔还可看到此不朽之作.CREATE PROCEDURE  dbo.OutputData       @tablename   sysname 

使用shell脚本生成只读权限的sql脚本

目前做数据迁移,有8套不同的环境,为了保护环境,每个环境中的表,视图等开发都不能修改,只能通过连接用户去查询. 每个环境中可能含有表,索引,序列,存储过程,函数等,所以一个一个写是不现实的,写了下面的动态脚本来自动生成相应的权限,然后创建对应的同义词. 脚本会生成两个sql脚本,一个是owner用户赋予权限使用的,另外一个脚本是connect用户使用的,创建了对应的同义词. source_schema=$1 conn_schema=$2 sqlplus -s xxx/xx   set feedb

自动生成SYBASE ASE的bcp脚本

通过系统表自动生成SYBASE ASE的bcp脚本 select 'bcp '+rtrim(db_name())+'..'+rtrim(name)+' out d:'+rtrim(db_name())+''+rtrim(name)+' -Uusername -Ppassword -Sdbserver -c' from sysobjects where type='U'

通过shell脚本生成查询表数据的sql

在工作中我们需要查询表的数据条数,一般来说就是使用select count(1)或者select count(*)之类的语句. 当然了对于不同的表来说,应该还是可以做一些细分,能够最大程度的提高效率,比如表中含有主键列,尝试走索引扫面可能会被全表扫描效率要高.如果表中的数据太多,而且没有一些相关的约束,可以考虑使用并行来提高等等. 以下就是使用shell脚本所做的查询数据条数的一个例子,看起来有些太不值得了,但是如果数据量很大的情况下这些分析就格外有用了. 比如表customer,数据量不是很大

mssql 生成‘批量Insert数据的sql语句’的存储过程

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[spGenInsertSQLHan]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[spGenInsertSQLHan] GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO CREATE   proc spGenIns

用Sql生成数据插入Sql脚本

CREATE PROCEDURE dbo.UspOutputData @tablename sysname 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

根据表名自动生成INSERT,UPDATE,DELETE,SELECT的SQL语句

select|语句 TBPROC CREATE Procedure TbProc@model varchar(2),@pagename varchar(32),@object varchar(32),@autoField varchar(32)=nullasset nocount onselect @model=upper(@model)select @pagename=lower(@pagename)select @object=upper(@object)declare @head varc