+ -
当前位置:首页 → 问答吧 → 谁能帮我写一个判断表是否存在的存储过程?非常感谢

谁能帮我写一个判断表是否存在的存储过程?非常感谢

时间:2007-11-07

来源:互联网

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这样的也不行,谁能帮我写一个。不胜感激。

作者: blood   发布时间: 2007-11-07

察看一个表是否存在不是这样干的!
我没有调试,如果有错误,自己调试一下就可以了.
SQL code


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 ;

作者: yueliangdao0608   发布时间: 2007-11-07

你可以再加一个IN参数 .把数据库的名字传进来.

作者: yueliangdao0608   发布时间: 2007-11-07

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

作者: blood   发布时间: 2007-11-07

我做了测试,没有LS所说的错误。

作者: yueliangdao0608   发布时间: 2007-11-07

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

作者: carlfeng   发布时间: 2007-11-08

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

作者: blood   发布时间: 2007-11-08

mark

作者: wewaa   发布时间: 2007-11-08

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

作者: minisunny   发布时间: 2007-11-08

我举的是MYSQL的例子 .

作者: yueliangdao0608   发布时间: 2007-11-08

该回复于2007-12-05 08:59:50被版主删除

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
#11楼 得分:0回复于:2007-11-14 15:16:02
mark

作者: neituia   发布时间: 2007-11-08

2楼, 增加一个IN参数把数据库的名字传进来是必要的,因为 table_schema+table_name 才能唯一确定一个table

另外代码应当可以正常执行,LZ是不是再检查下?

作者: qsxiaoyao   发布时间: 2007-11-14

不用传数据库的名字,直接用函数就可以

select table_name from information_schema.tables where table_schema = DATABASE() and table_name = yourtable;

作者: qzy6   发布时间: 2007-11-16

把 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;

作者: Guizhi   发布时间: 2007-12-27

SELECT TOP 1 name FROM sysobjects WHERE (xtype = 'P') AND (OBJECTPROPERTY(id, 'IsMSShipped') = 0) AND (name = '存储过程的名字') ORDER BY OBJECT_NAME(id)

试试这个,我SQLSERVER2005就是用这个来判断是否有某个存储过程的。

作者: Guizhi   发布时间: 2007-12-27