`
yizhyi
  • 浏览: 61435 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SQL中怎么样自动生成表的更新脚本

阅读更多

问题的提出:每当新建一个数据表,要建立个UP_TableName的存储过程来实现表的INSERT UPDATE DELETE操作。如建立了个表是 WoolenDeliveDetail,更新表的存储过程是UP_WoolenDeliveDetail

CREATE PROCEDURE UP_WoolenDeliveDetail
@INTUpdateID INT,
---1 删除 0 修改 1新增
@INTDeDetailID INT,
@INTDeID INT,
@INTColorID INT,
@NVD1 NVARCHAR(
20),
@NVD2 NVARCHAR(
20),
@NVD3 NVARCHAR(
20),
@NVD4 NVARCHAR(
20),
@NVD5 NVARCHAR(
20),
@NVD6 NVARCHAR(
20),
@NVD7 NVARCHAR(
20),
@NVD8 NVARCHAR(
20),
@NVD9 NVARCHAR(
20),
@NVD10 NVARCHAR(
20)
AS
IF (@INTUpdateID
=0)
Begin
UPDATE WoolenDeliveDetail SET DeID
=@INTDeID,ColorID=@INTColorID,
D1
=@NVD1,D2=@NVD2,D3=@NVD3,D4=@NVD4,D5=@NVD5,D6=@NVD6,
D7
=@NVD7,D8=@NVD8,D9=@NVD9,D10=@NVD10
WHERE DeDetailID
=@INTDeDetailID
End
ELSE IF (@INTUpdateID
=1)
Begin
SET @INTDeDetailID
=(Select ISNULL(MAX(DeDetailID),0) From WoolenDeliveDetail)+1
--取新的ID
INSERT INTO WoolenDeliveDetail (DeDetailID,DeID,ColorID,
D1,D2,D3,D4,D5,D6,D7,D8,D9,D10
) VALUES
(@INTDeDetailID,@INTDeID,@INTColorID,
@NVD1,@NVD2,@NVD3,@NVD4,@NVD5,@NVD6,@NVD7,@NVD8,@NVD9,@NVD10
)
End
ELSE
DELETE FROM WoolenDeliveDetail WHERE DeDetailID
=@INTDeDetailID
GO

  其他的常规的数据表更新存储过程与这存储过程结构差不多。有没有方法实现,新建一表后,执行一个通用的生成更新数据的存储过程,后生成该表的更新存储脚本??

  解决方法:

  用下面这个自动生成表的更新数据的存储过程:

CREATE PROCEDURE SP_CreateProcdure
@TableName nvarchar(50)
AS
/*
功能: 自动生成表的更新数据的存储过程
如:当建立表MyTable后,执行SP_CreateProcdure ,生成表MyTable的数据更
新的存储过程UP_MyTable
设计: OK_008
时间: 2006-05
备注:
1、请在查询分析器上执行:EXEC SP_CreateProcdure TableName
2、由于生成的字符串长度合计很多时候存在>4000以上,所有只使用Print输出,
再Copy即可。
3、该方法能生成一般表的更新数据的存储过程,其中更新格式可以根据实际
情况修改。
设计方法:
1、提取表的各个字段信息
2、 ──┰─ 构造更新数据过程
├─ 构造存储过程参数部分
├─ 构造新增数据部分
├─ 构造更新数据部分
├─ 构造删除数据部分
3、分段PRINT
4、把输出来的结果复制到新建立存储过程界面中即可使用。
*/
DECLARE @strParameter nvarchar(3000)
DECLARE @strInsert nvarchar(3000)
DECLARE @strUpdate nvarchar(3000)
DECLARE @strDelete nvarchar(500)
DECLARE @strWhere nvarchar(100)
DECLARE @strNewID nvarchar(100)
DECLARE @SQL_CreateProc nvarchar(4000)
SET @SQL_CreateProc='CREATE PROCEDURE UP_'
+@TableName +char(13)+'@INTUpdateID int,' +' /* -1 删除 0 修改 1新增 */' SET @strParameter='' SET @strInsert='' SET @strUpdate='' SET @strWhere='' DECLARE @TName nvarchar(50),@TypeName nvarchar(50),@TypeLength nvarchar(50),@Colstat bit DECLARE Obj_Cursor CURSOR FOR SELECT * FROM FN_GetObjColInfo(@TableName) OPEN Obj_Cursor FETCH NEXT FROM Obj_Cursor INTO @TName,@TypeName,@TypeLength,@Colstat WHILE @@FETCH_STATUS=0 BEGIN --构造存储过程参数部分 SET @strParameter=@strParameter +CHAR(13)+'@'+ @TName + ' ' +@TypeName+',' --构造新增数据部分 IF @Colstat=0 SET @strInsert=@strInsert + '@'+ @TName +',' --构造更新数据部分 IF (@strWhere='') BEGIN SET @strNewID='SET @'+@TName+'=(Select ISNULL(MAX('+@TName+'),0) From '+@TableName+')+1
--取新的ID' SET @strWhere=' WHERE '+@TName+'='+'@'+@TName END ELSE SET @strUpdate=@strUpdate+@TName+'='+'@'+@TName +',' --构造删除数据部分 FETCH NEXT FROM Obj_Cursor INTO @TName,@TypeName,@TypeLength,@Colstat END CLOSE Obj_Cursor DEALLOCATE Obj_Cursor SET @strParameter=LEFT(@strParameter,LEN(@strParameter)-1) --去掉最右边的逗号 SET @strUpdate=LEFT(@strUpdate,LEN(@strUpdate)-1) SET @strInsert=LEFT(@strInsert,LEN(@strInsert)-1) --存储过程名、参数 PRINT @SQL_CreateProc+@strParameter +CHAR(13)+'AS' --修改 PRINT 'IF (@INTUpdateID=0)' PRINT' BEGIN'+CHAR(13) PRINT CHAR(9)+'UPDATE '+@TableName+' SET '+@strUpdate+CHAR(13)+CHAR(9)+@strWhere PRINT ' END' --增加 PRINT 'IF (@INTUpdateID=1)' PRINT ' BEGIN' PRINT CHAR(9)+@strNewID PRINT CHAR(9)+'INSERT INTO '+@TableName+' SELECT '+@strInsert PRINT ' END' --删除 PRINT 'ELSE' PRINT ' BEGIN' PRINT CHAR(9)+'DELETE FROM '+@TableName +@strWhere PRINT ' END' PRINT 'GO' GO

  其中有的自定义函数FN_GetObjColInfo,代码如下:

<!---->/*功能:返回某一表的所有字段、存储过程、函数的参数信息 设计:OK_008 时间:2006-05*/ CREATE FUNCTION FN_GetObjColInfo (@ObjName varchar(50)) RETURNS @Return_Table TABLE( TName nvarchar(50), TypeName nvarchar(50), TypeLength nvarchar(50), Colstat Bit ) AS BEGIN INSERT @Return_Table select b.name as 字段名,c.name as 字段类型,b.length as 字段长度,b.colstat as 是否自动增长 from sysobjects a inner join syscolumns b on a.id=b.id inner join systypes c on c.xusertype=b.xtype where a.name =@ObjName order by B.ColID RETURN END

  经过自己测试,感觉还行。节省了很多写更新数据的存储过程时间

1
 
分享到:
评论

相关推荐

    MSsql数据表生成sql脚本

    在SQL Server Management Studio (SSMS) 中,你可以右键点击数据库或具体的数据表,选择“任务” -&gt; “生成脚本”,然后按照向导设置脚本的选项,如是否包含数据、脚本的目标版本等,最后即可生成对应的SQL脚本文件...

    SQL SERVER 数据自动生成SQL语句

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

    excel生成sql脚本

    你可以通过整理这些信息,手动编写CREATE TABLE语句来创建数据库表,但若能用Excel自动生成,将大大提高效率。 02-数据初始化及SQL生成文档.xls可能包含了一些预设的数据,用于测试或者填充新建立的数据库。在Excel...

    SQLSERVER脚本生成工具,表数据生成SQL脚本

    运行这个文件,用户通常需要提供数据库连接信息(如服务器名、数据库名、用户名和密码),然后选择要导出的表,工具就会自动生成对应的SQL脚本。生成的脚本可以根据需要进行编辑,比如添加条件、调整顺序或者合并多...

    sql脚本自动生成器11.0

    《SQL脚本自动生成器11.0:高效数据库管理与编程的得力助手》 在信息化时代,数据库管理与编程扮演着至关重要的角色。SQL(Structured Query Language)作为关系型数据库的语言,其脚本编写是数据库操作的核心部分...

    用于自动生成sql脚本的sql server数据库专用

    用于自动生成sql脚本的sql server数据库专用用于自动生成sql脚本的sql server数据库专用用于自动生成sql脚本的sql server数据库专用

    SQL插入脚本生成器

    该工具的核心功能是根据用户提供的数据源(如CSV文件或数据库表),自动生成符合这个结构的SQL语句。用户可能需要指定哪些列要包含在插入语句中,以及对应的值来源。如果数据源是另一张数据库表,工具可能会提供连接...

    SQL表记录脚本生成器

    SQL表记录脚本生成器能够自动生成这些信息,使得在创建新数据库或重建现有数据库时,可以快速准确地复现原有的表结构。 其次,索引的处理也至关重要。索引是提高数据库查询性能的关键因素,它可以加速数据的查找...

    mybatis自动sql生成插件源码

    本项目提供的"mybatis自动sql生成插件源码"则进一步提升了开发效率,通过拦截器(Interceptor)在运行时自动生成SQL语句,适用于具有主键或唯一索引的单表操作。 首先,`AutoMapperInterceptor.java`是这个插件的...

    SQL server自动生成Insert脚本

    可以根据表内容自动生成insert 脚本,select 脚本,update脚本; blob和text数据类型的字段不支持。 可以方便定制需要的字段和条件。 维护SQL server 十分方便的小工具。 在不同数据库或服务器之间传递数据非常...

    sql2005自动生成带数据的 数据库脚本

    以下将详细讲解如何在SQL Server 2005中自动生成带数据的数据库脚本。 一、SQL Server Management Studio (SSMS) 的使用 1. 打开SSMS:首先,你需要安装并启动SQL Server Management Studio,这是SQL Server 2005...

    SQLServer数据库部署工具,自动生成数据添加,更新脚本

    本文将深入探讨“SQLServer数据库部署工具”,该工具能自动生成数据添加、更新脚本,极大地方便了数据库的维护工作。 首先,我们来了解什么是数据库部署。数据库部署通常涉及创建数据库结构、设置权限、初始化数据...

    生成提取表中数据的sql脚本

    - 指出生成的脚本可以与通过SQL Server Management Studio(SSMS)工具自动生成的脚本结合使用,这通常指的是用于备份或迁移数据的脚本。 #### 标签解析 - **SQL Server**:标识本文涉及的是Microsoft SQL Server...

    SQL脚本自动生成器

    标题中的“SQL脚本自动生成器”是一款专为数据库管理员和开发者设计的工具,它能够自动从特定的数据库产品中提取指定表的数据,并将其转换成SQL脚本文件。这种工具通常用于在不同的数据库系统间迁移数据,或者备份和...

    为SQL server 2000数据生成脚本

    本文将详细解释如何为SQL Server 2000的数据生成脚本,以及这个过程中的关键知识点。 首先,生成数据脚本的主要目的是为了备份数据、初始化新的数据库环境或在不同服务器间迁移数据。在SQL Server 2000中,这可以...

    读取数据库表生成SQL脚本.zip

    "读取数据库表生成SQL脚本.zip"这个文件包显然提供了一个小工具,它可以帮助用户方便地从数据库中读取表格信息并自动生成相应的SQL脚本。这在数据迁移、备份、或者进行数据库结构分析时非常实用。下面将详细讨论相关...

    SQLSERVER脚本生成器

    8. **安全性**: 在生成脚本时,工具应考虑权限和安全设置,确保这些设置在新环境中得到正确复制,防止未授权访问或数据泄露。 9. **性能优化**: 生成的脚本可能会包含索引创建和优化建议,帮助提升数据库性能。然而...

    SQL脚本生成器.rar

    SQL脚本生成器可能提供界面,让用户选择要修改的表和字段,以及更新的条件,自动生成相应的SQL语句。 4. **删除/Delete)**:`DELETE`语句用于从表中移除记录。此工具可能允许用户指定删除条件,以确保正确地删除所...

    使用Powerdesigner生成sql脚本

    PowerDesigner是一款强大的数据建模工具,它能够帮助用户进行数据建模,包括概念数据模型(CDM)、物理数据模型(PDM)等,并能自动生成SQL脚本来创建数据库。以下步骤详细介绍了如何在PowerDesigner中生成SQL脚本。 **...

    Mybatis自动生成工具-脚本生成

    1. **实体类(Entity)**:根据数据库表结构自动生成对应的Java实体类,包含表中的所有字段及其属性,通常会使用getter和setter方法。 2. **Mapper接口(Mapper Interface)**:自动生成与数据库操作相关的接口,如...

Global site tag (gtag.js) - Google Analytics