首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL局部变量

SQL局部变量
EN

Stack Overflow用户
提问于 2011-08-10 15:11:24
回答 2查看 939关注 0票数 1

我使用SQL Server 2005,我的查询如下所示:

代码语言:javascript
复制
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函数对其进行计算。看起来像这样:

代码语言:javascript
复制
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)的那一行。我的查询出了什么问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-10 15:15:25

这应该会准确地告诉你你需要什么:http://msdn.microsoft.com/en-us/library/aa259186(v=sql.80).aspx

票数 1
EN

Stack Overflow用户

发布于 2011-08-10 15:20:12

我想这会做你想要的。

代码语言:javascript
复制
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'
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7007081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档