在MySql中,我可以返回(实际上是有效的)布尔值,使用它来确定数据库是否按名称存在。
SELECT EXISTS (SELECT 1 FROM information_schema.schemata WHERE schema_name = 'MyDatabase')
MS SQL中有什么相同的内容?
答案 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'