我使用SQL Server 2005和我有这样的查询:SQL局部变量
INSERT INTO [subject] ([sch_id],
[subj_from],
[subj_to],
)
SELECT
CASE
WHEN (SELECT @sched = [sch_id]
FROM [schedule]
WHERE [sch_name] = 'Searched Schedule Name') IS NULL THEN NULL
ELSE (SELECT @sched = [sch_id]
FROM [schedule]
WHERE [sch_name] = 'Searched Schedule Name')
END
AS 'sched_search_result',
'Sample Value',
'Sample Value'
这工作得很好。它在[subject]表中插入值,通过搜索的CASE语句从[schedule]表中获取第一个值[sch_id]。
我想避免代码冗余,所以我尝试将SELECT语句的结果存储在局部变量中,并使用ISNULL函数对其进行评估。看起来像这样:
DECLARE @sched INT
INSERT INTO [subject] ([sch_id],
[subj_from],
[subj_to],
)
SELECT
CASE ISNULL((SELECT @sched = [sch_id]
FROM [schedule]
WHERE [sch_name] = 'Searched Schedule Name'), 0)
WHEN 0 THEN NULL
ELSE @sched
END
AS 'sched_search_result',
'Sample value',
'Sample value'
但我的代码不起作用。 SQL Server 2005说这个错误来自我使用局部变量(@sched)的那一行。我的查询出了什么问题?
这实际上是我第一次使用局部变量。大声笑!感谢信息伙伴! :) – ELM
不要忘记ot标记答案 – Baz1nga