在内部SELECT语句中赋值变量

时间:2013-07-05 10:08:32

标签: sql-server variables select nested case

我想做的是这样的事情:

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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