sqlserver中使用 with as ,后面不能用if else吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver中使用 with as ,后面不能用if else吗?相关的知识,希望对你有一定的参考价值。

不能使用,with as是可以嵌套使用的

还有where后面不可以使用 case when
参考技术A sqlserver中的 with as 是 Common Table Express
SQL 语句里面没 if else 的。
除非你是存储过程。

你可以用 CASE WHEN 来实现一些 if else 的逻辑处理。追问

那where里面可以写case when吗?

追答

可以的.
例如:

With myCTE AS (
一段很长的SQL
)
SELECT
* (这里可以用 CASE WHEN)
FROM
myCTE
WHERE
... (这里也可以用 CASE WHEN)

如果 WHERE 的业务逻辑很复杂。
可以
(第一个条件 AND 第一个条件满足的情况下,某些条件)
OR
(第二个条件 AND 第二个条件满足的情况下,某些条件)
OR
下同

python with as

今天使用进程时使用了multipressing中的Lock,使用一次with Lock,很有意思.

python 中对with的处理思想四with所求的值的对象必须有一个__enter__()方法,一个__exit__()方法.

紧跟with后边的语句被求值后,返回对象的__enter__()方法被调用,这个方法的返回值将返回值给as后面的变量.

当with后面的代码块全部被执行完毕之后,将调用前面返回对象的__exit__()方法.

# class Sample:
#     def __enter__(self):
#         print("in __enter()")
#         return ‘Foo‘
#     def __exit__(self, exc_type, exc_val, exc_tb):
#         print(‘in __exit__()‘)
#
# def get_sample():
#     return Sample()
# with get_sample() as sample:
#     print(‘sample:‘,sample)
in __enter__()
sample: Foo
in __exit__()

__enter__()方法被执行

__enter__()方法返回值  - 这个例子中的是‘Foo‘,赋值给变量‘sample
执行代码块,打印变量‘sample‘的值为‘Foo‘

__exit__的方法被调用  

with的Sample类的__exit__方法有三个参数 -exc_type, exc_val, exc_tb,

# class Sample:
#     def __enter__(self):
#         return self
#     def __exit__(self, exc_type, exc_val, exc_tb):
#         print(‘type:‘,exc_type)
#         print(‘type:‘,exc_val)
#         print(‘type:‘,exc_tb)
#     def do_something(self):
#         bar = 1/0
#         return bar + 10
# with Sample() as sample:
#     sample.do_something()

with 会自动调用她的类,然后执行__enter__,执行with后的方法和with下的方法,然后执行__exit__函数,这个函数会自动关闭,回收资源等.  

  


以上是关于sqlserver中使用 with as ,后面不能用if else吗?的主要内容,如果未能解决你的问题,请参考以下文章

SqlServer自定义函数Function中调用with as

PL/SQL with as 用法。

在sql server中利用with as实现递归功能

oracle--with as

python with as

with as 如何工作