zoukankan      html  css  js  c++  java
  • 存储过程示例增加、删除、修改任意表中的任意字段 Yang

    1:当表不存在时,会根据你输入的表名自动创建一个表,同时也会根据你输入的字段名添加一个字段到该表中。

    2:当表中的字段只有1个时,不能删除这个唯一的字段。

    3:修改字段,包括修改字段的类型和修改字段的长度,这里的数据类型只包括nvarchar、int、float、datetime、money、bit。

        如果想要添加varchar等有长度的字段类型只需要稍微修改一下Lower(@strColumnType) = 'nvarchar',在所在有的判断中再添加条件即可。

    4:当IF、ELSE、 ELSE IF中有多条SQL语句时,请使用BEGIN  END,类型于程序语言中的大括号{},不然可能会出错。

    5:涉及到的知道点有:查询数据库有那些表、查询表中有那些列、ALERT修改字段类型及字段长度....

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go
    -- =============================================
    -- Author:         风清&云淡
    -- Create date: 20130111 -- Description: 表存在:添加列、删除列(当表的字段多于1个时才能删除)、修改列长度或类型 -- 表不存在:添加表、添加列 -- ============================================= ALTER PROCEDURE [dbo].[sp_EditColumnForSomeTable] @strTableName NVARCHAR(100), --表名 @strColumnName NVARCHAR(100), --字段名 @strColumnType NVARCHAR(20), --字段类型 @intColumnLength INT, --字段长度 @intFlag INT, --删除或添加修改字段 0:添加字段或修改字段长度及类型、1:删除字段 @isTableExists INT, --判断表是否存在0:不存在,>0存在 不需要传入值或传null @iSColumnExists INT, --用于判断字段是否存在,0:不存在,>0存在 不需要传入值或传null @intColumnCount INT --用于判断当前表有多少列,如果列等于1则不允许删除 不需要传入值或传null AS BEGIN SET NOCOUNT ON; --查看表名是否存在 SELECT @isTableExists=COUNT(ID) from sysobjects WHERE xtype='U' AND NAME= @strTableName; --1:表存在才执行对表中列的增删改 IF(@isTableExists>0) BEGIN --查看这个表有多少列 SELECT @intColumnCount=COUNT(NAME) FROM syscolumns WHERE ID =(SELECT MAX(ID) from sysobjects WHERE xtype='U' AND NAME= @strTableName); --查看传入的字段名在对应的表中是否存在 SELECT @iSColumnExists= COUNT(NAME) FROM syscolumns WHERE ID =(SELECT MAX(ID) from sysobjects WHERE xtype='U' AND NAME= @strTableName) AND NAME=@strColumnName; --1.1:如果字段名不存在,则添加字段 IF(@iSColumnExists=0) BEGIN --1.1.1:只有nvarchar类型才有字段长度,其他类型没有(界面上有:nvarchar bit int float datetime) IF(Lower(@strColumnType) = 'nvarchar') EXEC('ALTER TABLE dbo.['+@strTableName+'] ADD '+@strColumnName+' '+ @strColumnType+ '('+@intColumnLength+')'); --1.1.2:bit int float datetime没字段长度 ELSE EXEC('ALTER TABLE dbo.['+@strTableName+'] ADD '+@strColumnName+' '+ @strColumnType); END --1.2:如果字段名存在,修改字段长度或类型 ELSE BEGIN --1.2.1:修改字段长度或字段类型 IF(@intFlag=0) BEGIN --1.2.1.1:字段类型为nvarchar则修改字段的长度 IF(Lower(@strColumnType) = 'nvarchar') EXEC('ALTER TABLE dbo.['+@strTableName+'] ALTER COLUMN '+@strColumnName+' '+ @strColumnType+ '('+@intColumnLength+')'); --1.2.1.2:修改字段类型 ELSE EXEC('ALTER TABLE dbo.['+@strTableName+'] ALTER COLUMN '+@strColumnName+' '+ @strColumnType); END --1.2.2:删除字段(当表中的字段大于1时才能删除) ELSE IF(@intFlag=1 AND @intColumnCount>1) EXEC('ALTER TABLE dbo.['+@strTableName+'] DROP COLUMN '+@strColumnName); END END --2:表不存在,创建表,再添加 当前想要添加的列 ELSE BEGIN IF(Lower(@strColumnType) = 'nvarchar') EXEC('CREATE TABLE '+@strTableName+'('+@strColumnName +' '+@strColumnType+'('+@intColumnLength+') )'); ELSE EXEC('CREATE TABLE '+@strTableName+'('+@strColumnName +' '+@strColumnType+' )'); END END   
  • 相关阅读:
    .NET Windows编程系列课程(视频课程讲师:邵志东)
    ADO.NET 2.0 系列课程(视频课程讲师:徐长龙)
    [导入]SaaS软件即服务系列课程(7):Overview of the first Microsoft SaaS Sample Application. LitwareHR.zip(9.21 MB)
    ASP.NET 2.0入门与提高系列课程(视频课程讲师:徐栋)
    使用.NET Remoting 建立分布式应用程序(视频课程讲师:任旻)
    ASP.NET AJAX深入浅出系列课程(视频课程讲师:赵劼)
    IIS7开发系列课程(视频课程讲师:韩锐)
    ASP.NET MVC框架开发系列课程(视频课程讲师:赵劼)
    IIS支持APK文件下载的方法
    structs配置文件代码
  • 原文地址:https://www.cnblogs.com/Yang2012/p/2857297.html
Copyright © 2011-2022 走看看