DROP PROCEDURE IF EXISTS  `sp_Check_Table`;DELIMITER $$CREATE PROCEDURE `sp_Check_Table`
(
IN p_TableName varchar(50)
 )
BEGIN
SELECT COUNT(1) FROM p_TableName
END $$
DELIMITER ;我这样写了一个,不能运行。mysql存储过程这么弱智?不能把参数当成表名吗?
还有使用那个show tables like p_TableName这样的也不行,谁能帮我写一个。不胜感激。

解决方案 »

  1.   

    察看一个表是否存在不是这样干的!
    我没有调试,如果有错误,自己调试一下就可以了.
    delimiter ||
    create procedure sp_check_table (IN p_tablename varchar(50))
    begin
      select count(1) from information_schema.tables where table_name = p_tablename into @cnt;
      if @cnt != 0 then 
        select 'Table exists!';
      else 
        select 'Table not exists!';
      end if;
    end||
    delimiter ;
      

  2.   

    有问题耶
    如果表不存在。能返回正常的结果。
    如果表存在。就会报错。。
    我不知道是什么问题。
    1054-Unknown column 'tablename' in 'field list'
    报这个错误。
    是什么原因呢?能帮忙解答一下吗?
    还要怎么调整才可以正常执行?
    谢谢了
      

  3.   

    call sp_check_table('p_tablename')  就不会报错
      

  4.   

    你的mysql是什么版本的?
    我为什么测试,输入字母的表名就会提示这个错误。
    输入数字就正常?
    这是为什么?
    只要输入英文,就会提示1054-Unknown   column   'tablename '   in   'field   list '
    太古怪了。
    另外你真的按照这个test了吗?
    自己test一下英文或者其他字符,数字是一定正常的。
      

  5.   

    1楼举的是MSSQL的例子。
    我也只会MSSQL,不会MYSQL。
    帮不了你了哦。
      

  6.   

    2楼, 增加一个IN参数把数据库的名字传进来是必要的,因为 table_schema+table_name 才能唯一确定一个table另外代码应当可以正常执行,LZ是不是再检查下?
      

  7.   

    不用传数据库的名字,直接用函数就可以select table_name from information_schema.tables where table_schema = DATABASE()  and table_name = yourtable;
      

  8.   

    把 14楼 也占了,呵呵if exists( select 1 from  information_schema.tables   where   table_schema   =   DATABASE()     and   table_name   =   yourtable) then
       set @flag = 'exists';
    else
       set @flag = 'not exists';
    end if;
      

  9.   

    SELECT TOP 1 name FROM sysobjects WHERE (xtype = 'P') AND (OBJECTPROPERTY(id, 'IsMSShipped') = 0) AND (name = '存储过程的名字') ORDER BY OBJECT_NAME(id)试试这个,我SQLSERVER2005就是用这个来判断是否有某个存储过程的。