use pubs
go
if exists(select name from sysobjects
          where name = 'createdatabase' and type ='p')
drop procedure createdatabase
go
create procedure createdatabase(@databasefilename varchar(50))
ascreate database @databasefilename --提示这里有错,为什么?
on
(
....
)
log on
(
....
)go之所以用变量,目的:
在VC程序中多次调用这个存储过程,创建多个数据库,如果不用这种方法,还有它法来实习这个目标吗,谢谢。

解决方案 »

  1.   

    create database @databasefilename --提示这里有错,为什么?
    on
    (
    ....
    )
    log on
    (
    ....
    )改為串執行,參考﹕
    declare @abc
    set @abc='create database ' + @dname + '...'
    execute (@abc)
      

  2.   

    if exists(select name from sysobjects
              where name = 'sp_create_database' and type ='p')
    drop procedure sp_create_database
    gocreate procedure sp_create_database@dbname sysname = null /* name of db */asdeclare @retcode int,
    @exec_str nvarchar (460)if (not (is_srvrolemember('sysadmin') = 1)) -- Make sure that it's the SA executing this.
    begin
    raiserror(15247,-1,-1)
    return(1)
    endif @dbname is null
    begin
    raiserror (15261,-1,-1)
    return (1)
    endif exists (select * from master.dbo.sysdatabases where name = @dbname)
    begin
    raiserror(15032,-1,-1,@dbname)
    return(1)
    end/* Check to see if a valid database name was supplied. */
    exec @retcode = sp_validname @dbname
    if @retcode <> 0
    return(1)/* Create the database's system device segment. */
    select @exec_str = 'CREATE DATABASE '
    + quotename( @dbname , '[')
    + ' ON (NAME ='
    +'apple_equipment_service_db_dat'
    + ',FILENAME ='
    +''''
    + 'c:\apple_equipment_service_dbdat.mdf'
    +''''
    + ',SIZE ='
    + convert(varchar(28),5)
    +',MAXSIZE ='
    +convert(varchar(28),20)
    +',FILEGROWTH ='
    +convert(varchar(28),1)
    + ') LOG ON (NAME='
    + 'apple_equipment_service_db_log'
    + ',FILENAME ='
    +''''
    + 'c:\apple_equipment_service_dbdat.ldf'
    +''''
    + ',SIZE ='
    + convert(varchar(28),5)
    +',MAXSIZE ='
    +convert(varchar(28),20)
    +',FILEGROWTH ='
    +convert(varchar(28),1)
    + ')'
    exec(@exec_str)if @@error <> 0
    begin
    raiserror(15264,-1,-1,'system or log')
    return(1)
    endreturn(0)