我想做的是这样的事情:
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
答案 0 :(得分:2)
通常这些内容是从sql-server优化的,因此子查询不会多次执行。
但是,您可以使用ISNULL
或COALESCE
:
SELECT et.ExampleField,
COALESCE((SELECT ...),'') As Col
FROM ExampleTable et
答案 1 :(得分:0)
请记住,T-SQL是声明性语言。所以它负责优化。它不会多次执行select语句。