【问题标题】:Working T-SQL query gives error when values assigned to variables将值分配给变量时,工作 T-SQL 查询会出错
【发布时间】:2015-01-27 18:55:17
【问题描述】:

以下查询有效。但是,当我取消注释注释行以便将查询变量分配给本地定义的变量时,我在最后的“;”处收到语法错误。

 DECLARE @tmp_total_ct int = 0;
 DECLARE @tmp_closed_ct int = 0;

 --SELECT @tmp_total_ct = tot_ct, @tmp_closed_ct = cls_ct
 --    FROM (
        SELECT COUNT(*) AS tot_ct,
        SUM(IIF(is_closed = 1, 1, 0)) AS cls_ct
              FROM  corp.CashDealDetails
                INNER JOIN WidgeStores wstrs
                   ON corp.CashDealDetails.abbrev = wstrs.abbrev
              WHERE mall_id IN
                (SELECT mall_ndx FROM WidgeStores wstrs
                   WHERE wstrs.abbrev IN 
                      (SELECT abbrev FROM @tmpMkts)
                   AND wstrs.[is_opn] = 1
                )
                AND YEAR(closing_dt) = 2012
        --);

我相信我使用正确的语法将查询值分配给用户定义的变量,正如这些线程的其他帖子中所解释的那样。语法错误到底在哪里?

【问题讨论】:

  • 别名主子查询

标签: sql-server syntax variable-assignment


【解决方案1】:
 declare @tmp_total_ct int
 declare @tmp_closed_ct int

 SELECT @tmp_total_ct = tot_ct, @tmp_closed_ct = cls_ct
     FROM (
        SELECT COUNT(*) AS tot_ct,
        SUM(IIF(is_closed = 1, 1, 0)) AS cls_ct
              FROM  corp.CashDealDetails
                INNER JOIN WidgeStores wstrs
                   ON corp.CashDealDetails.abbrev = wstrs.abbrev
              WHERE mall_id IN
                (SELECT mall_ndx FROM WidgeStores wstrs
                   WHERE wstrs.abbrev IN 
                      (SELECT abbrev FROM @tmpMkts)
                   AND wstrs.[is_opn] = 1
                )
                AND YEAR(closing_dt) = 2012
) a 

print @tmp_total_ct
print @tmp_closed_ct

【讨论】:

  • 谢谢!做到了。为了清楚起见,我将子查询别名添加为赋值变量的前缀。所以,“a.tot_ct”和“a.cls_ct”。但是,SQL Server 不需要这样做。
  • 对,我总是尝试使用别名,即使不需要,只要它会更清晰!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2017-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-15
相关资源
最近更新 更多