我现在创建了两个存储过程 createDB 和 createTable,createDB用来接收一个输入参数作为数据库名,创建数据库,createTable接收一个输入参数作为表明,创建一个表!
但是执行后出现了如下错误:
消息 2812,级别 16,状态 62,第 3 行
找不到存储过程 'createTable'。我创建存储过程如下:
在E盘下,创建一个文本文件,然后改名为***.sql,双击然后在Managerment Studio Express打开编辑!代码如下:
CREATE PROCEDURE createDB 
-- Add the parameters for the stored procedure here
@DBname varchar(20) = 'dqleakdb_test'
--<@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>, 
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- 如果已经存在需要创建的数据库,则先删除了,然后再重新创建
IF exists (SELECT * FROM sys.databases WHERE name = @DBname) 
Exec ( 'drop database' + @DBname )
DECLARE   @s   varchar(2000)
set   @s   =   ' 
CREATE DATABASE ' + @DBname +'
ON
(
NAME = ' + @DBname + '_Data,
FILENAME = ''C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\' + @DBname + '.mdf'',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5
)
LOG ON
(
NAME = ' + @DBname + '_Log,
FILENAME = ''C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\' + @DBname + 'Log.mdf'',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB
)
'
EXEC  ( @s )
END
GO
CREATE PROCEDURE createTable
-- Add the parameters for the stored procedure here
@TableName varchar(20) = 'ZCXXB'
--<@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>, 
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- 如果已经存在需要创建的表,则先删除了,然后再重新创建
IF exists (select * from sysobjects where id = object_id(@TableName))
-- IF exists (SELECT * FROM sys.databases WHERE name = @DBname) 
Exec ( 'drop table' + @TableName ) IF @TableName = 'ZCXXB'
BEGIN
DECLARE   @s   varchar(2000)
set   @s   =   '
CREATE TABLE ' + @TableName + '
GDQYID char(3) NOT NULL
GDBHID char(3) NOT NULL
SBID char(3) NOT NULL
IP varchar(15) NOT NULL
PORT INT NOT NULL
'
END

EXEC  ( @s )
END
GO执行代码:
创建一个名为TEST的数据库,然后在其中创建使用默认参数的表
EXEC createDB 'TEST'
USE TEST
EXEC createTable

解决方案 »

  1.   

    EXEC createDB 'TEST'
    USE TEST
    go
    EXEC createTable
      

  2.   

    消息 911,级别 16,状态 1,第 2 行
    在 sysdatabases 中找不到数据库 'TEST' 所对应的条目。没有找到具有该名称的条目。请确保正确地输入了该名称。
      

  3.   

    消息 911,级别 16,状态 1,第 2 行
    在 sysdatabases 中找不到数据库 'TEST' 所对应的条目。没有找到具有该名称的条目。请确保正确地输入了该名称。
    消息 102,级别 15,状态 1,第 1 行
    'tableZCXXB' 附近有语法错误。
    消息 2714,级别 16,状态 6,第 2 行
    数据库中已存在名为 'ZCXXB' 的对象。默认创建的ZCXXB在master中创建了~~
      

  4.   

    消息 911,级别 16,状态 1,第 2 行
    在 sysdatabases 中找不到数据库 'TEST' 所对应的条目。没有找到具有该名称的条目。请确保正确地输入了该名称。
      

  5.   

    消息 911,级别 16,状态 1,第 10 行
    在 sysdatabases 中找不到数据库 'TEST' 所对应的条目。没有找到具有该名称的条目。请确保正确地输入了该名称。我的是sql server2005
    两个存储过程都是在单独的文件里创建 然后执行的
    然后就在系统的master的存储过程里创建了相应的存储过程
    然后运行执行代码
    我觉得此时可以调用系统里的存储过程
    但是USE TEST 后 就换到TEST环境里 是不存在createTable的存储过程的 他是存在master数据路里的