--简单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 scripts),这些语句可以用于在其他数据库或备份环境中重现数据。...
5. **自动生成Insert语句**:为了批量生成Insert语句,我们需要遍历用户表中的所有记录,并为每一行生成对应的Insert语句。这可以通过编写SQL查询,或者使用编程语言(如C++结合MFC)实现。程序可能首先获取表结构,...
根据提供的文件信息,我们可以构建一个详细的SQL Server存储过程来实现将表中的数据转换为`INSERT INTO`脚本的功能。此存储过程将适用于多种数据类型,并能够动态生成插入语句,以便用户可以方便地导出数据作为脚本...
SQL Server存储过程生成器是一种工具,它极大地简化了数据库开发者的工作,尤其是对于处理大量表及其关联操作时。这种工具能够自动分析数据库结构,并根据表的定义生成相应的存储过程,节省了手动编写这些复杂脚本的...
6. **动态SQL**:存储过程中可以嵌入动态SQL语句,根据需要在运行时生成并执行SQL。 7. **返回值**:存储过程可以设置返回值,用`RETURN`语句传递结果给调用者。 **SQL触发器**: 1. **定义**:触发器是一种特殊的...
在SQL Server中,虽然没有直接的内置功能来批量生成INSERT语句,但可以通过SQL查询或其他工具(如SQL Server Management Studio - SSMS)配合T-SQL脚本来实现这一目标。 例如,你可以编写一个存储过程或者使用SSMS...
要排除自增列并处理非固定数据类型,你可以编写一个存储过程,生成动态的INSERT语句。首先,你需要获取表结构,然后构造INSERT语句,避开自增列。例如: ```sql DECLARE @sql NVARCHAR(MAX) = '' SELECT @sql +...
使用存储过程生成器(sql server 2000)可以大大降低开发和维护存储过程的复杂性,提升开发人员的工作效率。不过,值得注意的是,虽然这类工具可以简化工作流程,但了解SQL基础和存储过程的工作原理仍然是必要的,因为...
10. **动态SQL**:在存储过程中,可以使用字符串拼接生成动态SQL语句,然后通过sp_executesql执行,这种方法在处理灵活的查询需求时非常有用,但要注意防止SQL注入攻击。 11. **存储过程的版本控制**:对于大型项目...
总的来说,`spGenInsertSQL`存储过程提供了一种方便的方式来动态生成INSERT语句,帮助用户快速地在不同的SQL Server数据库间复制数据。然而,为了确保数据的完整性和一致性,使用前应仔细检查生成的SQL语句,并在...
### SQL Server 存储过程实现表数据导出为 INSERT 语句 在 SQL Server 数据库管理系统中,有时候我们需要将表中的数据导出成一系列的 INSERT 语句,这对于备份、恢复或者迁移数据非常有用。本篇文章详细介绍了一个...
描述进一步指出,这个存储过程生成器可以自动生成INSERT、SELECT、UPDATE等基本操作的存储过程。这些操作是数据库管理中最常见的任务,包括向表中插入新数据(INSERT)、检索数据(SELECT)以及更新现有数据(UPDATE...
SQL Server 数据自动生成SQL语句是一项实用的功能,它极大地简化了数据迁移或备份的过程。这个功能使得用户能够快速地根据数据库中的表结构和已有数据,生成相应的SQL插入语句,以便将这些数据移植到其他数据库系统...
sqlserver的存储过程批量生成insert插入语句 在需要批量导入数据或者保留数据的情况下使用
SQL Server的存储过程是数据库管理系统中的一个重要特性,它是一组预先定义并编译好的SQL语句,用于执行特定的任务。存储过程的使用极大地提升了数据库应用的效率和安全性。以下是关于SQL Server存储过程的详细说明...
【C#-SqlServer代码生成器】是一个专门针对Microsoft SQL Server数据库设计的代码生成工具,它旨在简化开发过程中与数据库交互的代码编写工作。利用C#编程语言的强大功能,该工具能够自动生成高效的数据库操作代码,...
在这种背景下,一款名为“好用的数据库助手”的工具应运而生,它支持两大主流数据库系统——SQL Server和Oracle,并且具备自动生成SQL语句和集成Python脚本调试的先进功能。 对于数据库管理员而言,编写有效的SQL...
根据给定的SQL Server存储过程代码片段,我们可以深入解析与SQL Server中的`GROUP BY`分组查询、存储过程以及分页技术相关的知识点。 ### SQL Server中的`GROUP BY`分组查询 `GROUP BY`子句在SQL查询语言中用于将...
通过以上方法,你可以有效地在SQL Server中生成INSERT语句,无论是手动编写存储过程,还是使用提供的工具,都能提高数据操作的效率和准确性。对于数据库管理和开发人员来说,理解并掌握这一技巧是非常重要的。
默认情况下,SQL Server提供了一些内置机制,如`IDENTITY`属性,来自动为新插入的记录生成唯一的整数主键。然而,有时候根据特定的需求,可能需要自定义主键生成策略,例如,通过存储过程和触发器来实现。下面我们将...