Sql 存在与 MySql 存在

Sql Exists vs MySql Exists

在 MySql 中,我可以 return(有效的)一个布尔值,使用它来确定数据库是否按名称存在。

SELECT EXISTS (SELECT 1 FROM information_schema.schemata WHERE schema_name = 'MyDatabase')

MS SQL 有什么相同之处?

在SQL服务器中你可以这样做:

IF EXISTS (SELECT 1 FROM ...)
 SELECT 1
ELSE
 SELECT 0

有意思的是,EXISTS函数虽然做的是return一个可以通过IF测试的boolean,但是不能直接选择

这在 SQL 服务器中不起作用:

SELECT EXISTS(SELECT 1)

但是这样做:

IF EXISTS(SELECT 1)
 SELECT 1
ELSE 
 SELECT 0

奇怪。

编辑:进一步思考,我猜想 MySQL 可能会把 EXISTS() 当作一个 return 是一个值的函数,而 SQL Server 将其视为条件表达式,要么通过要么失败,但 return 没有值。

所以在 SQL 服务器 中,尝试 SELECT EXISTS() 的结果就像尝试 SELECT ('a' > 'b') 一样。它做不到。我想知道如果你尝试 MySQL 会怎样?

使用CASE WHEN EXISTS()..

SELECT CASE WHEN EXISTS(SELECT * FROM ...) THEN 1 ELSE 0 END

t-sql 中没有布尔值这样的东西。最接近的是实际上允许三个值(0、1 和 NULL)的位。如果你想 select 1 或 0,你可以通过将 count(*) 转换为位来实现。 0 以外的任何值都将是 1。

select MyResult = convert(bit, count(*))
FROM information_schema.schemata
where SCHEMA_NAME = 'YourSchemaName'