sql判断库、表、列、存储过程、视图、函数存在性与创建

本文介绍了一段用于数据库操作的自动化脚本,包括数据库、表、存储过程、视图和函数的创建与更新逻辑。脚本通过判断对象是否存在来决定是否创建、删除并重新创建,确保了操作的高效性和准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--库是否存在,如果不存在则添加,如果存在则先删除,再添加;feiyan(数据库名称)

if not exists (select * from master..sysdatabases where name=N'feiyan')
  begin
    create database feiyan
  end
else
  begin
    drop database feiyan
    create database feiyan 
  end


-- 判断要创建的表是否存在,如果不存在则添加,如果存在则先删除,再添加;feiyan(表名)
if object_id (N'dbo.feiyan', N'table') is null
--if (select object_id( 'feiyan ')) is null (对表来说这样也可以)
  begin
    create table feiyan (xm nvarchar(6))
  end
else
  begin
    drop table feiyan
    create table feiyan (xm nvarchar(6))
  end

--判断一个表的某个列是否存在,如果不存在则添加,如果存在则先删除,再添加;feiyan(表名),xm(列名)
if  col_length( 'feiyan ', 'xm') is  null
  begin
    alter table feiyan add xm nvarchar(6)
  end 
else
  begin
    alter table feiyan drop column xm
    alter table feiyan add xm nvarchar(6)   
  end


-- 判断要创建的存储过程名是否存在,如果不存在则添加,如果存在则先删除,再添加;MyProcedure(存储过程名)
if object_id (N'dbo.MyProcedure', N'procedure') is null
  Begin
    declare @sql varchar(8000)
    set @sql = 'create procedure MyProcedure as select getdate()'
    execute(@sql) 
  End 
Else
  Begin
    drop procedure MyProcedure 
    set @sql = 'create procedure MyProcedure  as select getdate()'
    execute(@sql)
  End


-- 判断要创建的视图名是否存在,如果不存在则添加,如果存在则先删除,再添加;MyView(视图名),feiyan(表名)
if object_id (N'dbo.MyView', N'view') is null
 Begin
    declare @sql varchar(8000)
    set @sql='create view MyView as select xm from feiyan'
    execute(@sql)
  End
Else
  Begin
    drop view MyView
    set @sql='create view MyView as select xm from feiyan'
    execute(@sql)
  End


-- 判断要创建的函数名是否存在,如果不存在则添加,如果存在则先删除,再添加;myfunction(函数名)

if object_id (N'dbo.myfunction', N'FN') is null
  Begin
    declare @sql varchar(8000)
    set @sql='Create FUNCTION MyFunction() RETURNS int as begin return 1 end'
    execute(@sql) 
  End
Else
  Begin
    drop function myfunction
    set @sql='Create FUNCTION MyFunction() RETURNS int as begin return 1 end'
    execute(@sql)
  End

 

注:
object_id:返回架构范围内对象的数据库对象标识号。 OBJECT_ID (N'dbo.AWBuildVersion', N'U')
     




附上自己写的一个,函数是截取字符串中的数字

if object_id (N'dbo.F_Get_No', N'FN') is null
  Begin
    declare @sql varchar(8000)
    set @sql='CREATE function [dbo].[F_Get_No]
(
@No varchar(100)
)
RETURNS FLOAT
AS
BEGIN
WHILE PATINDEX(''%[^0-9.]%'',@No)>0
BEGIN
SET @No=STUFF(@No,PATINDEX(''%[^0-9.]%'',@No),1,'''')
END
RETURN CONVERT(FLOAT,@No)
END'
    execute(@sql) 
  End
Else
  Begin
    drop function F_Get_No
    set @sql='CREATE function [dbo].[F_Get_No]
(
@No varchar(100)
)
RETURNS FLOAT
AS
BEGIN
WHILE PATINDEX(''%[^0-9.]%'',@No)>0
BEGIN
SET @No=STUFF(@No,PATINDEX(''%[^0-9.]%'',@No),1,'''')
END
RETURN CONVERT(FLOAT,@No)
END'
    execute(@sql)
  End


由于@sql里面的内容会出现',所以需要用到转义,2个'就表示'的转义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值