`

sqlserver 生成insert 存储过程

阅读更多
--简单insert语句
create     proc   spGenInsertSQL  
  @TableName   as   varchar(100)  
  as  
  --declare   @TableName   varchar(100)  
  --set   @TableName   =   'orders'  
  --set   @TableName   =   'eeducation'  
  DECLARE   xCursor   CURSOR   FOR  
  SELECT   name,xusertype  
  FROM   syscolumns  
  WHERE   (id   =   OBJECT_ID(@TableName))  
  declare   @F1   varchar(100)  
  declare   @F2   integer  
  declare   @SQL   varchar(8000)  
  set   @sql   ='SELECT   ''INSERT   INTO   '   +   @TableName   +   '   VALUES('''  
  OPEN   xCursor  
  FETCH   xCursor   into   @F1,@F2  
  WHILE   @@FETCH_STATUS   =   0  
  BEGIN  
          set   @sql   =@sql   +  
                              +   case   when   @F2   IN   (35,58,99,167,175,231,239,61)   then   '   +   case   when   '   +   @F1   +   '   IS   NULL   then   ''''   else   ''''''''   end   +   '     else   '+'   end  
                              +   'replace(ISNULL(cast('   +   @F1   +   '   as   varchar(8000)),''NULL''),'''''''','''''''''''')'    
                              +   case   when   @F2   IN   (35,58,99,167,175,231,239,61)   then   '   +   case   when   '   +   @F1   +   '   IS   NULL   then   ''''   else   ''''''''   end   +   '     else   '+'   end  
                              +   char(13)   +   ''','''    
          FETCH   NEXT   FROM   xCursor   into   @F1,@F2  
  END  
  CLOSE   xCursor  
  DEALLOCATE   xCursor  
  set   @sql   =   left(@sql,len(@sql)   -   5)   +   '   +   '')''   FROM   '   +   @TableName  
  exec   (@sql)  
   
  go
EXEC spGenInsertSQL basorgteam
--完整insert语句(多列)
CREATE PROCEDURE dbo.OutputData

@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 @ident int


set nocount on

set @objectId=object_id(@tablename)

if @objectId is null -- 判断对象是否存在

begin

print @tablename + '对象不存在'

return

end

set @objectname=rtrim(object_name(@objectId))

if @objectname is null or charindex(@objectname,@tablename)=0

begin

print @tablename + '对象不在当前数据库中'

return

end

if OBJECTPROPERTY(@objectId,'IsTable') < > 1 -- 判断对象是否是表

begin

print @tablename + '对象不是表'

return

end

select @ident=status&0x80 from syscolumns where id=@objectid and status&0x80=0x80

if @ident is not null

print 'SET IDENTITY_INSERT '+ @TableName + ' ON'

--定义游标,循环取数据并生成Insert语句

declare syscolumns_cursor cursor for

select c.name,c.xtype from syscolumns c

where c.id=@objectid

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 @column=@column +

case when len(@column)=0 then ''

else ','

end + @name

set @columndata = @columndata +

case when len(@columndata)=0 then ''

else ','','','

end +

case when @xtype in(167,175) then '''''''''+'+@name+'+''''''''' --varchar,char

when @xtype in(231,239) then '''N''''''+'+@name+'+''''''''' --nvarchar,nchar

when @xtype=61 then '''''''''+convert(char(23),'+@name+',121)+''''''''' --datetime

when @xtype=58 then '''''''''+convert(char(16),'+@name+',120)+''''''''' --smalldatetime

when @xtype=36 then '''''''''+convert(char(36),'+@name+')+''''''''' --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 '+@tablename+'('+@column+') values(''as ''--'','+@columndata+','')'' from '+@tablename

print '--'+@sql

exec(@sql)

if @ident is not null

print 'SET IDENTITY_INSERT '+@TableName+' OFF'

--执行存储过程语句
exec OutputData functionButtonInfo

--完整insert语句(单列,每列的长度最大为256,如果insert语句超过256长度的话,就不要用这个)
create proc proc_insert (@tablename varchar(256))

as

begin

set nocount on

declare @sqlstr nvarchar(10000)

declare @sqlstr1 nvarchar(10000)

declare @sqlstr2 nvarchar(10000)

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 =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

-- print @sqlstr

exec( @sqlstr)

set nocount off

end

go


exec proc_insert functionButtonInfo
分享到:
评论

相关推荐

    sql server 生成 insert 脚本 工具

    SQL Server生成INSERT脚本工具是一种实用程序,它能够帮助数据库管理员和开发人员高效地从现有的SQL Server数据库中自动生成插入语句(INSERT scripts),这些语句可以用于在其他数据库或备份环境中重现数据。...

    SQLServer导出为Insert语句

    5. **自动生成Insert语句**:为了批量生成Insert语句,我们需要遍历用户表中的所有记录,并为每一行生成对应的Insert语句。这可以通过编写SQL查询,或者使用编程语言(如C++结合MFC)实现。程序可能首先获取表结构,...

    SQL SERVER:把表里的数据导出成为INSERT INTO脚本的存储过程

    根据提供的文件信息,我们可以构建一个详细的SQL Server存储过程来实现将表中的数据转换为`INSERT INTO`脚本的功能。此存储过程将适用于多种数据类型,并能够动态生成插入语句,以便用户可以方便地导出数据作为脚本...

    sqlserver存储过程生成器

    SQL Server存储过程生成器是一种工具,它极大地简化了数据库开发者的工作,尤其是对于处理大量表及其关联操作时。这种工具能够自动分析数据库结构,并根据表的定义生成相应的存储过程,节省了手动编写这些复杂脚本的...

    SQL server存储过程习题,SQL触发器习题.rar

    6. **动态SQL**:存储过程中可以嵌入动态SQL语句,根据需要在运行时生成并执行SQL。 7. **返回值**:存储过程可以设置返回值,用`RETURN`语句传递结果给调用者。 **SQL触发器**: 1. **定义**:触发器是一种特殊的...

    SQL 导出数据 insert 语句

    在SQL Server中,虽然没有直接的内置功能来批量生成INSERT语句,但可以通过SQL查询或其他工具(如SQL Server Management Studio - SSMS)配合T-SQL脚本来实现这一目标。 例如,你可以编写一个存储过程或者使用SSMS...

    将sqlserver表中指定数据转化为insert语句

    要排除自增列并处理非固定数据类型,你可以编写一个存储过程,生成动态的INSERT语句。首先,你需要获取表结构,然后构造INSERT语句,避开自增列。例如: ```sql DECLARE @sql NVARCHAR(MAX) = '' SELECT @sql +...

    存储过程生成器(sql server 2000)

    使用存储过程生成器(sql server 2000)可以大大降低开发和维护存储过程的复杂性,提升开发人员的工作效率。不过,值得注意的是,虽然这类工具可以简化工作流程,但了解SQL基础和存储过程的工作原理仍然是必要的,因为...

    SQLServer 2000存储过程手册

    10. **动态SQL**:在存储过程中,可以使用字符串拼接生成动态SQL语句,然后通过sp_executesql执行,这种方法在处理灵活的查询需求时非常有用,但要注意防止SQL注入攻击。 11. **存储过程的版本控制**:对于大型项目...

    SQL Server存储过程生成insert语句实例

    总的来说,`spGenInsertSQL`存储过程提供了一种方便的方式来动态生成INSERT语句,帮助用户快速地在不同的SQL Server数据库间复制数据。然而,为了确保数据的完整性和一致性,使用前应仔细检查生成的SQL语句,并在...

    sqlserver导出insert语句的存储过程

    ### SQL Server 存储过程实现表数据导出为 INSERT 语句 在 SQL Server 数据库管理系统中,有时候我们需要将表中的数据导出成一系列的 INSERT 语句,这对于备份、恢复或者迁移数据非常有用。本篇文章详细介绍了一个...

    存储过程生成器源代码,可自动生成所有存储过程 适合sql server 2000

    描述进一步指出,这个存储过程生成器可以自动生成INSERT、SELECT、UPDATE等基本操作的存储过程。这些操作是数据库管理中最常见的任务,包括向表中插入新数据(INSERT)、检索数据(SELECT)以及更新现有数据(UPDATE...

    SQL SERVER 数据自动生成SQL语句

    SQL Server 数据自动生成SQL语句是一项实用的功能,它极大地简化了数据迁移或备份的过程。这个功能使得用户能够快速地根据数据库中的表结构和已有数据,生成相应的SQL插入语句,以便将这些数据移植到其他数据库系统...

    生成insert语句的存储过程

    sqlserver的存储过程批量生成insert插入语句 在需要批量导入数据或者保留数据的情况下使用

    SQL Server 存储过程与实例

    SQL Server的存储过程是数据库管理系统中的一个重要特性,它是一组预先定义并编译好的SQL语句,用于执行特定的任务。存储过程的使用极大地提升了数据库应用的效率和安全性。以下是关于SQL Server存储过程的详细说明...

    C#-SqlServer代码生成器

    【C#-SqlServer代码生成器】是一个专门针对Microsoft SQL Server数据库设计的代码生成工具,它旨在简化开发过程中与数据库交互的代码编写工作。利用C#编程语言的强大功能,该工具能够自动生成高效的数据库操作代码,...

    好用的数据库助手;支持SQL Server,Oracle ;可以自动生成insert语句或update语句;

    在这种背景下,一款名为“好用的数据库助手”的工具应运而生,它支持两大主流数据库系统——SQL Server和Oracle,并且具备自动生成SQL语句和集成Python脚本调试的先进功能。 对于数据库管理员而言,编写有效的SQL...

    sqlserver+group by分组查询分页存储过程

    根据给定的SQL Server存储过程代码片段,我们可以深入解析与SQL Server中的`GROUP BY`分组查询、存储过程以及分页技术相关的知识点。 ### SQL Server中的`GROUP BY`分组查询 `GROUP BY`子句在SQL查询语言中用于将...

    在SQL Server中生成INSERT语句

    通过以上方法,你可以有效地在SQL Server中生成INSERT语句,无论是手动编写存储过程,还是使用提供的工具,都能提高数据操作的效率和准确性。对于数据库管理和开发人员来说,理解并掌握这一技巧是非常重要的。

    在SQLSERVER中通过存储过程和触发器创建主键生成器

    默认情况下,SQL Server提供了一些内置机制,如`IDENTITY`属性,来自动为新插入的记录生成唯一的整数主键。然而,有时候根据特定的需求,可能需要自定义主键生成策略,例如,通过存储过程和触发器来实现。下面我们将...

Global site tag (gtag.js) - Google Analytics