我希望用户输入他们想要检查的数据库以及他们想要检查的任何表。例如,调用将如下所示:
call tableCheck('MyDatabase', 'table1 table20 table3')
因此,该过程将检查这些表(空格分隔)。我在下面有我的代码,但我检查其他表有问题,它读取第一个但不是第二个或第三个。所以我的代码没有循环或没有阅读下一个单词。
PROCEDURE `tableCheck` (db VARCHAR(256), db_tables VARCHAR(256))
BEGIN
DECLARE tbl, tbls VARCHAR(256);
DECLARE c INT DEFAULT 0;
SET tbls = db_tables;
WHILE c = 0 DO
#split word
SET tbl = SUBSTRING_INDEX(tbls," ",1);
#go to next string
SET tbls = SUBSTR(tbls,LENGTH(tbl)+1);
#check every table
SELECT table_name AS 'Table Name'
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema=db AND table_name=tbl;
IF tbls = 0 THEN
SET c = 1;
END IF;
END WHILE;
END
答案 0 :(得分:0)
我今天已经多次给出了这个链接......所以也许它对你也有用。 Convert a delimited string to a list of values
使用该链接中的dbo.fnArray函数,您应该能够像这样加入INFORMATION_SCHEMA.TABLES:
create procedure dbo.spCheckTable @db varchar(256), @tbls varchar(8000)
as
begin
select *
from INFORMATION_SCHEMA.TABLES i
inner join dbo.fnArray(@tbls, ' ') t on i.TABLE_NAME = t.arrValue
where i.TABLE_CATALOG = @db
end
现在是一个存储过程