我有一个使用DROP TABLE IF EXISTS删除大量表的脚本,这可行。
此脚本中还有一个删除操作,用于删除另一个我不管理的表中的行。此表可能存在也可能不存在。在尝试删除行之前是否有任何检查表存在?
这需要适用于MYSQL和SQLServer
感谢 亚历
答案 0 :(得分:11)
签入SQL SERVER,
IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'TheSchema' AND TABLE_NAME = 'TheTable'))
BEGIN
--Do Stuff
END
签入mysql:
你算一算:
SELECT COUNT(*)
FROM information_schema.tables
WHERE table_schema = '[database name]'
AND table_name = '[table name]';
答案 1 :(得分:6)
答案 2 :(得分:3)
对于SQL Server:您可以使用:
IF OBJECT_ID('tablename','U') IS NOT NULL
答案 3 :(得分:3)
我不认为你会在SQL服务器和我的SQL之间找到一个通用的语法。我的意思是,您可以使用以下内容检查SQL Server上的表是否存在:
if exists(select * from sys.objects where name like 'table_name')
但是mySql会有自己的目录。
除非您编写如下脚本:
if (sql_server) then
if exists(select * from sys.objects where name like 'table_name')
else --mySQl
--execute the mysql script
答案 4 :(得分:2)
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TABLE_NAME]') AND type in (N'U'))
答案 5 :(得分:1)
在我看来,右边“相关”栏中的第一项回答了你的问题.... Check if table exists in SQL Server
答案 6 :(得分:1)
对于MySQL
show tables like "test1";
对于SQL Server
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'testSchema' AND TABLE_NAME = 'test1'
答案 7 :(得分:1)
您想问自己的问题(在数据库设计方面):您为什么要尝试从不确定存在的表中删除行?如果它没有,但你期望它,你宁愿创建表而不是删除它吗?
无论如何,Chris Gesslers的答案确切地说明了你在SQL Server中提出的要求,但这里有一些气味。
您可以使用的MySQL构造
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'databasename'
AND table_name = 'tablename'
并检查结果
答案 8 :(得分:0)
您可以使用以下代码:
DECLARE @TABLENAME VARCHAR(20)='TableName';
IF (OBJECT_ID(@TABLENAME) IS NOT NULL )
BEGIN
execute(N'TRUNCATE TABLE ' + @TABLENAME + '' );
END
ELSE
BEGIN
PRINT 'Table NOT Exists'
END