【问题标题】:Assign variable in inner SELECT statement在内部 SELECT 语句中分配变量
【发布时间】:2013-07-05 10:08:32
【问题描述】:

我想做的是这样的:

DECLARE @Test NVARCHAR(200)
SELECT et.ExampleField, (SELECT CASE (@Test = (SELECT 'Test')) WHEN @Test IS NOT NULL THEN @Test
ELSE
''
END) FROM ExampleTable et

出于可读性的目的,我对其进行了一些简化,但基本上(SELECT 'Test') 位可以是任何 SQL SELECT 语句拉回一个值(或NULL)供我测试。

这可以吗?我尝试这样做的原因是我希望通过消除对嵌套选择的需要来提高效率,在这个例子中(SELECT 'Test'),不必运行不止一次,即这样的事情,确实有效:

DECLARE @Test NVARCHAR(200)
SELECT et.ExampleField, (SELECT CASE WHEN (SELECT 'Test') IS NOT NULL THEN (SELECT 'Test')
ELSE
''
END) FROM ExampleTable et

【问题讨论】:

    标签: sql-server variables select nested case


    【解决方案1】:

    通常这些东西是从 sql-server 优化的,所以子查询不会多次执行。 但是,您可以使用ISNULLCOALESCE

    SELECT et.ExampleField, 
           COALESCE((SELECT ...),'') As Col
    FROM ExampleTable et
    

    更简单的例子:http://sqlfiddle.com/#!2/d41d8/15850

    【讨论】:

    • 所以看起来我可能不需要担心查询被多次执行。但是,当您说这些事情“通常”优化时,您是说在某些情况下会发生这种情况吗?如果是这样,你能举出任何例子吗?或者它会非常复杂,以至于我不太可能遇到这种情况?谢谢。
    【解决方案2】:

    请记住,T-SQL 是声明式语言。所以它负责优化。它不会多次执行 select 语句。

    【讨论】:

      猜你喜欢
      • 2014-12-04
      • 2011-09-09
      • 2013-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      • 2018-07-31
      相关资源
      最近更新 更多