在itpub中看到一个c# Winform实现对数据库的操作,可惜很多是写死了的,不过这到让我想到了是否可以通过存储过程实现对数据库和表结构的操作。有些时候,项目中可能要动态的增加表字段,删除表字段,重命名之类的,而客户端不一定能访问到远程的服务器,在这个时候也许就会有些许用处了。总结了一下,我把相关的存储过程实现,经在SQL2005 测试是OK的,我把他放上来,跟大家分享,同时欢迎大家多多指教.
希望能对大家有用.


创建表

CREATE PROCEDURE dbo.CreateUserTable
    @TableName sysname
AS
    EXEC('CREATE TABLE '+@TableName+
        ' (column1 varchar(100), column2 varchar(100))');


GO


读取表中字段

create procedure SelectTableField
@TableName varchar(50)
as
SELECT     TABLE_CATALOG AS [Database], TABLE_SCHEMA AS Owner, TABLE_NAME AS TableName, COLUMN_NAME AS ColumnName,  ORDINAL_POSITION AS OrdinalPosition, COLUMN_DEFAULT AS DefaultSetting, IS_NULLABLE AS IsNullable, DATA_TYPE AS DataType,  CHARACTER_MAXIMUM_LENGTH AS MaxLength, DATETIME_PRECISION AS DatePrecision,COLUMNPROPERTY(object_id(TABLE_NAME), COLUMN_NAME, 'IsIdentity') as IsIdentity 
FROM         INFORMATION_SCHEMA.COLUMNS WHERE     (TABLE_NAME = @TableName)


删除表

CREATE PROCEDURE dbo.DropUserTable
    @TableName sysname
AS
    IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_SCHEMA = 'dbo'
        AND TABLE_TYPE = 'BASE TABLE'
        AND TABLE_NAME = @TableName)
    BEGIN
      
    EXEC('drop TABLE ' +  @TableName);
      
    END


表的重命名

CREATE PROCEDURE dbo.ReNameUserTable
    @OldTableName sysname,
    @NewTableName sysname
AS
    IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_SCHEMA = 'dbo'
        AND TABLE_TYPE = 'BASE TABLE'
        AND TABLE_NAME = @OldTableName)
    BEGIN
      
    exec sp_rename  @OldTableName ,@NewTableName
      
    END


增加表中字段

CREATE PROCEDURE dbo.AddUserTableField
    @TableName sysname,
    @FieldName varchar(200)
AS
    IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_SCHEMA = 'dbo'
        AND TABLE_TYPE = 'BASE TABLE'
        AND TABLE_NAME = @TableName)
    BEGIN
      
    exec ('alter table ' + @TableName + ' Add ' +  @FieldName +' varchar(200) ') 
      
    END


删除表中字段

CREATE PROCEDURE dbo.DropUserTableField
    @TableName sysname,
    @FieldName varchar(200)
AS
    IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_SCHEMA = 'dbo'
        AND TABLE_TYPE = 'BASE TABLE'
        AND TABLE_NAME = @TableName)
    BEGIN
      
    exec ('alter table ' + @TableName + ' drop column ' +  @FieldName ) 
      
    END


数据库重命名(这个貌似会出错,出于共享锁的原因)

create procedure RenameDataBase
@OldDataBaseName varchar(20),
@NewDataBaseName varchar(20)
as

begin
EXEC sp_renamedb @OldDataBaseName ,@NewDataBaseName 
end


获取所有的存储过程

  
create procedure SelectAllProcedure
as
EXEc   sp_MSforeachObject   @command1="sp_helptext   '?'   ",@objectType=4 

go

获取所有的视图

create procedure SelectAllView
as
EXEc   sp_MSforeachObject   @command1="sp_helptext   '?'   ",@objectType=2 
go
posted on 2007-12-04 09:53  德仔  阅读(382)  评论(4编辑  收藏  举报