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