我使用SQL Server 2005,我的查询如下所示:
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表中,第一个值sch_id通过搜索的CASE语句从明细表中获取。
我希望避免代码冗余,因此我尝试将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 Server2005显示错误来自我使用局部变量(@sched)的那一行。我的查询出了什么问题?
发布于 2011-08-10 15:15:25
这应该会准确地告诉你你需要什么:http://msdn.microsoft.com/en-us/library/aa259186(v=sql.80).aspx
发布于 2011-08-10 15:20:12
我想这会做你想要的。
INSERT INTO [subject] ([sch_id], [subj_from], [subj_to])
SELECT (
SELECT [sch_id]
FROM [schedule]
WHERE [sch_name] = 'Search Schedule Name'
),
'from value',
'to value'https://stackoverflow.com/questions/7007081
复制相似问题