2

我想做的是这样的:

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')位可以是任何 SQLSELECT语句拉回一个值(或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
4

2 回答 2

2

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

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

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

于 2013-07-05T10:15:12.153 回答
0

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

于 2013-07-05T10:15:33.767 回答