Sql存在vs MySql存在

时间:2018-06-06 18:32:47

标签: mysql sql sql-server exists

在MySql中,我可以返回(实际上是有效的)布尔值,使用它来确定数据库是否按名称存在。

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

MS SQL中有什么相同的内容?

3 个答案:

答案 0 :(得分:3)

在SQL Server中,您可以这样做:

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

有趣的是,尽管EXISTS函数确实返回了一个可以由IF测试的布尔值,但它无法直接选择。

这在SQL Server中不起作用:

SELECT EXISTS(SELECT 1)

但这样做:

IF EXISTS(SELECT 1)
 SELECT 1
ELSE 
 SELECT 0

怪异。

编辑:进一步反思,我猜 MySQL 可能会将EXISTS()视为返回值的函数,而 SQL Server 会将其视为条件表达式无论是通过还是失败,但都没有返回值。

因此,在 SQL Server 中,尝试SELECT EXISTS()的结果就像尝试SELECT ('a' > 'b')一样。它无法做到。我想知道如果你尝试 MySQL 会怎么做?

答案 1 :(得分:3)

使用CASE WHEN EXISTS()..

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

答案 2 :(得分:3)

在t-sql中没有boolean这样的东西。最接近的是一个实际上允许三个值(0,1和NULL)的位。如果要选择1或0,可以通过将count(*)转换为位来实现。除0以外的任何值都是1。

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