USE master
GOIF EXISTS(SELECT name FROM sysobjects              --判斷過程judge是否存在
      WHERE name = 'judge' AND type = 'P')
   DROP PROCEDURE judge
GOCreate Proc judge @DatabaseName varchar(20)='%'
AS 
if exists (select name from sysdatabases where name = @DatabaseName )
begin
  Drop database DBMoney1   <--這里為什麼不能用@DatabaseName代替?
  create database DBMoney1
end
else
  create database DBMoney1
GOexec judge 'DBMoney1'          --執行過程
GO為什麼Drop database DBMoney1<--這里為什麼不能用@DatabaseName代替?

解决方案 »

  1.   

    declare @sqlstr varchar(1000)set @sqlstr =' Drop database '+@DatabaseName 
    exec (@sqlstr) set @sqlstr =' create database '+@DatabaseName 
    exec (@sqlstr) 
      

  2.   

    ron_xin(星雨) ( ) 信誉:100 
    --------------
    说得没错,楼主要的功能必须用动态生成存储过程才行的
      

  3.   

    Create Proc judge @DatabaseName varchar(20)='%'
    AS 
    if exists (select name from sysdatabases where name = @DatabaseName )
    begin
      Drop database DBMoney1   <--這里為什麼不能用@DatabaseName代替?
      create database DBMoney1
    end
    else
      create database DBMoney1
    GO
    -----------------------
    Create Proc judge @DatabaseName varchar(20)='%'
    AS
    declare @sqlstr nvarchar(4000)
    set @sqlstr='if exists (select name from sysdatabases where name ='''+@DatabaseName+''')'+char(13)
    set @sqlstr=@sqlstr+'begin'+char(13)
    set @sqlstr=@sqlstr+'Drop database '+@DatabaseName+''+char(13)
    set @sqlstr=@sqlstr+'create database '+@DatabaseName+''+char(13)
    set @sqlstr=@sqlstr+'end'+char(13)
    set @sqlstr=@sqlstr+'else'+char(13)
    set @sqlstr=@sqlstr+'create database '+@DatabaseName+''+char(13)
    exec (@sqlstr)
    GO