`
azheng270
  • 浏览: 92924 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

MS SQL server 生成 insert 数据的存储过程脚本

阅读更多
  1. CREATEPROCEDUREdbo.UspOutputData
  2. @tablenamesysname
  3. AS
  4. declare@columnvarchar(1000)
  5. declare@columndatavarchar(1000)
  6. declare@sqlvarchar(4000)
  7. declare@xtypetinyint
  8. declare@namesysname
  9. declare@objectIdint
  10. declare@objectnamesysname
  11. declare@identint
  12. setnocounton
  13. set@objectId=object_id(@tablename)
  14. if@objectIdisnull--判断对象是否存在
  15. begin
  16. print'Theobjectnotexists'
  17. return
  18. end
  19. set@objectname=rtrim(object_name(@objectId))
  20. if@objectnameisnullorcharindex(@objectname,@tablename)=0--此判断不严密
  21. begin
  22. print'objectnotincurrentdatabase'
  23. return
  24. end
  25. ifOBJECTPROPERTY(@objectId,'IsTable')<>1--判断对象是否是table
  26. begin
  27. print'Theobjectisnottable'
  28. return
  29. end
  30. select@ident=status&0x80fromsyscolumnswhereid=@objectidandstatus&0x80=0x80
  31. if@identisnotnull
  32. print'SETIDENTITY_INSERT'+@TableName+'ON'
  33. declaresyscolumns_cursorcursor
  34. forselectc.name,c.xtypefromsyscolumnscwherec.id=@objectidorderbyc.colid
  35. opensyscolumns_cursor
  36. set@column=''
  37. set@columndata=''
  38. fetchnextfromsyscolumns_cursorinto@name,@xtype
  39. while@@fetch_status<>-1
  40. begin
  41. if@@fetch_status<>-2
  42. begin
  43. if@xtypenotin(189,34,35,99,98)--timestamp不需处理,image,text,ntext,sql_variant暂时不处理
  44. begin
  45. set@column=@column+casewhenlen(@column)=0then''else','end+@name
  46. set@columndata=@columndata+casewhenlen(@columndata)=0then''else','','','
  47. end
  48. +casewhen@xtypein(167,175)then'''''''''+'+@name+'+'''''''''--varchar,char
  49. when@xtypein(231,239)then'''N''''''+'+@name+'+'''''''''--nvarchar,nchar
  50. when@xtype=61then'''''''''+convert(char(23),'+@name+',121)+'''''''''--datetime
  51. when@xtype=58then'''''''''+convert(char(16),'+@name+',120)+'''''''''--smalldatetime
  52. when@xtype=36then'''''''''+convert(char(36),'+@name+')+'''''''''--uniqueidentifier
  53. else@nameend
  54. end
  55. end
  56. fetchnextfromsyscolumns_cursorinto@name,@xtype
  57. end
  58. closesyscolumns_cursor
  59. deallocatesyscolumns_cursor
  60. set@sql='setnocountonselect''insert'+@tablename+'('+@column+')values(''as''--'','+@columndata+','')''from'+@tablename
  61. print'--'+@sql
  62. exec(@sql)
  63. if@identisnotnull
  64. print'SETIDENTITY_INSERT'+@TableName+'OFF'
  65. GO
CREATEPROCEDUREdbo.UspOutputData
@tablenamesysname
AS
declare@columnvarchar(1000)
declare@columndatavarchar(1000)
declare@sqlvarchar(4000)
declare@xtypetinyint
declare@namesysname
declare@objectIdint
declare@objectnamesysname
declare@identint

setnocounton
set@objectId=object_id(@tablename)

if@objectIdisnull--判断对象是否存在
begin
print'Theobjectnotexists'
return
end
set@objectname=rtrim(object_name(@objectId))

if@objectnameisnullorcharindex(@objectname,@tablename)=0--此判断不严密
begin
print'objectnotincurrentdatabase'
return
end

ifOBJECTPROPERTY(@objectId,'IsTable')<>1--判断对象是否是table
begin
print'Theobjectisnottable'
return
end

select@ident=status&0x80fromsyscolumnswhereid=@objectidandstatus&0x80=0x80

if@identisnotnull
print'SETIDENTITY_INSERT'+@TableName+'ON'

declaresyscolumns_cursorcursor

forselectc.name,c.xtypefromsyscolumnscwherec.id=@objectidorderbyc.colid

opensyscolumns_cursor
set@column=''
set@columndata=''
fetchnextfromsyscolumns_cursorinto@name,@xtype

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

begin
set@column=@column+casewhenlen(@column)=0then''else','end+@name

set@columndata=@columndata+casewhenlen(@columndata)=0then''else','','','
end

+casewhen@xtypein(167,175)then'''''''''+'+@name+'+'''''''''--varchar,char
when@xtypein(231,239)then'''N''''''+'+@name+'+'''''''''--nvarchar,nchar
when@xtype=61then'''''''''+convert(char(23),'+@name+',121)+'''''''''--datetime
when@xtype=58then'''''''''+convert(char(16),'+@name+',120)+'''''''''--smalldatetime
when@xtype=36then'''''''''+convert(char(36),'+@name+')+'''''''''--uniqueidentifier
else@nameend

end

end

fetchnextfromsyscolumns_cursorinto@name,@xtype

end

closesyscolumns_cursor
deallocatesyscolumns_cursor

set@sql='setnocountonselect''insert'+@tablename+'('+@column+')values(''as''--'','+@columndata+','')''from'+@tablename

print'--'+@sql
exec(@sql)

if@identisnotnull
print'SETIDENTITY_INSERT'+@TableName+'OFF'

GO

分享到:
评论

相关推荐

    MSsql数据表生成sql脚本

    MS SQL Server提供了内置的功能来生成数据库对象的脚本。在SQL Server Management Studio (SSMS) 中,你可以右键点击数据库或具体的数据表,选择“任务” -&gt; “生成脚本”,然后按照向导设置脚本的选项,如是否包含...

    数据导出为Insert 脚本

    在MS SQL SERVER中,导出数据为Insert脚本通常是为了备份数据、迁移数据或者在测试环境中重现生产环境的数据状态。这个过程可以通过SQL Server Management Studio (SSMS) 来实现: 1. 打开SSMS,连接到你的SQL ...

    MS SQL Server7概述

    总之,MS SQL Server 7 是一个功能强大的企业级数据库管理系统,为各种规模的企业提供了可靠的数据存储和管理解决方案。虽然后续版本(如SQL Server 2000、2005等)在许多方面进行了改进和增强,但SQL Server 7的...

    MS SQL 存储过程解密

    根据提供的信息,我们可以深入探讨如何在MS SQL Server中解密加密的存储过程、触发器、函数和视图等内容。此过程涉及使用自定义脚本,通过解析加密对象并逐步重建其原始定义,来实现解密的目标。 ### MS SQL 存储...

    把msSqlServer 中的数据导出成 insert into语句

    综上所述,存储过程`dbo.UspOutputData`提供了一种灵活且强大的方法,用于将MS SQL Server中的数据导出为SQL插入语句,极大地简化了数据迁移和脚本化工作流程。然而,使用时也应充分考虑其局限性和潜在风险,采取...

    Log Explorer for SQL Server v4.22 含注册机

    服务器端代理是保存在SQLServer主机中的一个只读存储过程,他的作用是接受客户端请求,读取在线事物日志块并通过网络传给客户端软件,由客户端软件来读取这些原始的数据块来完成Log Explore所提供的所有功能。...

    SQLServer2000开发者指南(pdf)

    - **5.7 通过 ODBC 调用 SQL Server 数据库的存储过程** - 如何通过 ODBC 执行存储过程。 - **5.8 ODBC 错误处理** - 错误代码和消息的处理机制。 #### 第6章 使用 ADO 访问 SQL Server 数据库 - **6.1 概述** ...

    《SQL Server 2000数据库基础与应用》测试题二.doc

    1. **系统存储过程**:在MS SQL Server中,用来显示数据库信息的系统存储过程是`sp_helpdb`,选项D。系统存储过程是一组预编译的Transact-SQL语句,用于执行特定的数据库管理任务。 2. **删除表的命令**:在SQL语言...

    Apress.Beginning.SQL.Server.for.Developers.2014

    无论是对数据库一无所知的新手,还是熟悉桌面级数据库如MS Access,甚至是具有服务器级数据库背景(如Oracle、DB2、Sybase等)的学习者,都能从本书中获得快速上手SQL Server所需的知识。 本书适用于SQL Server ...

    SQLServerDriverForPHP11

    - **报表生成**:结合PHP的报表库,如PHPExcel,可以生成基于SQL Server数据的复杂报表。 综上所述,SQLServerDriverForPHP11是PHP开发者处理SQL Server数据库的利器,它使得在PHP环境中访问和操作SQL Server数据变...

    SQL21日自学通

    使用SQL 来生成SHELL 脚本371 再建表和索引372 总结373 问与答373 校练场373 练习374 第18 天PL/SQL 简介376 目标376 入门376 在PL/SQL 中的数据类型377 字符串类型377 数值数据类型378 二进制数据类型378 日期...

    sql语句学习简单示例

    9. **权限管理**:SQL还可以设置表、存储过程和视图的权限,控制用户对数据的访问。 在网站开发中,SQL常常与RDBMS(关系型数据库管理系统)如MySQL、SQL Server、Oracle等结合使用,并通过服务器端脚本语言(如PHP...

    SQL-入门新手教程(重要).doc

    RDBMS,即关系型数据库管理系统,是SQL的基础,包括如MS SQL Server、IBM DB2、Oracle、MySQL和Microsoft Access等常见系统。 SQL的主要功能包括: 1. **查询**:SQL允许用户根据需求从数据库中检索数据,通过`...

    mssqldump:用于为 MS SQL 创建 dbdump 的 Powershell 实用程序,类似于 mysqldump 和 pg_dump

    #MS SQL Dump 这是一个简单的 PowerShell 脚本,可让您为 MS SQL 创建数据库导出,类似于使用mysqldump和pg_dump ##Usage 将$database更改$database您的数据库名称并从 PowerShell 运行脚本。 它将在当前目录中创建...

    将mater库中的系统存储过程批量生成*.sql文件 通用且非常实用

    3. **生成SQL脚本**:对于每一个存储过程,生成一系列SQL命令,并使用`xp_cmdshell`将其写入到指定路径下的`.sql`文件中。 ```sql exec xp_cmdshell 'echo IF EXISTS(SELECT * FROM sys.objects WHERE object_id ...

    SQL教程详解

    - **RDBMS数据库程序**:如MS Access、SQL Server、MySQL等。 - **服务器端脚本语言**:如PHP、ASP等。 - **SQL**:用于处理数据库的查询语言。 - **HTML/CSS**:用于网页布局和样式的设计语言。 #### RDBMS(关系...

    数据修改ASP.rar

    ASP(Active Server Pages)是一种由微软开发的服务器端脚本环境,用于生成动态网页或Web应用程序。在ASP中,我们通常使用VBScript或JScript语言编写脚本,这些脚本在服务器上执行,并将结果返回到客户端的浏览器。...

    EA帮助文档翻译(数据建模)1.0.doc

    - 支持的数据库类型包括DB2、Informix、Ingres、InterBase、MS Access、MySQL、Oracle 9i/10g、PostgreSQL、SQL Server 2000/2005、SQL Server 7、Sybase ASE等。 - 双击表中的数据元素打开属性对话框,选择“常规...

    asp导出Excel,导入Excel到MSSQL

    MSSQL(Microsoft SQL Server)则是微软公司推出的数据库管理系统,广泛应用于数据存储和管理。当我们需要在ASP环境下处理Excel数据时,可能会涉及到数据的导出和导入操作。下面将详细解释如何使用ASP导出Excel以及...

Global site tag (gtag.js) - Google Analytics