存储过程:“为变量赋值的SELECT语句不能与数据检索操作组合”

时间:2013-10-01 22:17:46

标签: sql-server sql-server-2008 tsql stored-procedures

我无法找到我试图在存储过程中使用的SELECT语句出了什么问题:

SELECT TOP 1 @TARIF = t.rea_est_tax_cla_ali_area, 
             @CHARACTERISTIC = t.rea_est_cha_id, 
             @USE = t.rea_est_use_id, 
             @TYPE = t.typ_rea_est_id, 
             ( ( CASE 
                   WHEN t.rea_est_tax_cla_ali_area IS NULL THEN 1 
                   ELSE 0 
                 END ) + ( CASE 
                             WHEN t.rea_est_cha_id IS NULL THEN 1 
                             ELSE 0 
                           END ) + ( CASE 
                                       WHEN t.rea_est_use_id IS NULL THEN 1 
                                       ELSE 0 
                                     END ) + ( CASE 
                                                 WHEN t.typ_rea_est_id IS NULL 
                                               THEN 1 
                                                 ELSE 0 
                                               END ) ) AS NULLCOLUMNCOUNT 
FROM   dbo.tbl_real_estate_tax_classifier 

任何帮助表示赞赏,由于工作规定,我无法提交整个程序,但问题似乎存在。

2 个答案:

答案 0 :(得分:5)

为了便于阅读,我使用换行符重新格式化了代码。

SELECT TOP 1
    @TARIF = T.REA_EST_TAX_CLA_ALI_AREA, 
    @CHARACTERISTIC = T.REA_EST_CHA_ID, 
    @USE     = T.REA_EST_USE_ID, 
    @TYPE = T.TYP_REA_EST_ID,
    ((CASE WHEN T.REA_EST_TAX_CLA_ALI_AREA IS NULL THEN 1 ELSE 0 END)+(CASE WHEN T.REA_EST_CHA_ID IS NULL THEN 1 ELSE 0 END)
    +(CASE WHEN T.REA_EST_USE_ID IS NULL THEN 1 ELSE 0 END)+(CASE WHEN T.TYP_REA_EST_ID IS NULL THEN 1 ELSE 0 END)) AS NULLCOLUMNCOUNT 
FROM dbo.TBL_REAL_ESTATE_TAX_CLASSIFIER 

希望你现在能看到问题。 NULLCOLUMNCOUNT是你的罪魁祸首。

你的意思是写这个吗?

SELECT TOP 1 
    @TARIF = T.REA_EST_TAX_CLA_ALI_AREA, 
    @CHARACTERISTIC = T.REA_EST_CHA_ID, 
    @USE     = T.REA_EST_USE_ID, 
    @TYPE = T.TYP_REA_EST_ID,
    @NULLCOLUMNCOUNT =    ((CASE WHEN T.REA_EST_TAX_CLA_ALI_AREA IS NULL THEN 1 ELSE 0 END)+(CASE WHEN T.REA_EST_CHA_ID IS NULL THEN 1 ELSE 0 END)
    +(CASE WHEN T.REA_EST_USE_ID IS NULL THEN 1 ELSE 0 END)+(CASE WHEN T.TYP_REA_EST_ID IS NULL THEN 1 ELSE 0 END)) 
FROM dbo.TBL_REAL_ESTATE_TAX_CLASSIFIER 

答案 1 :(得分:3)

错误似乎很清楚 - 您正在使用select的一部分为变量赋值,而part则返回为列。

也许你想要这样的东西?

SELECT TOP 1 
    @TARIF = T.REA_EST_TAX_CLA_ALI_AREA, 
    @CHARACTERISTIC = T.REA_EST_CHA_ID, 
    @USE     = T.REA_EST_USE_ID, 
    @TYPE = T.TYP_REA_EST_ID,
    @NULLCOLUMNCOUNT = ((CASE WHEN T.REA_EST_TAX_CLA_ALI_AREA IS NULL THEN 1 ELSE 0 END)
                       +(CASE WHEN T.REA_EST_CHA_ID IS NULL THEN 1 ELSE 0 END)
                       +(CASE WHEN T.REA_EST_USE_ID IS NULL THEN 1 ELSE 0 END)
                       +(CASE WHEN T.TYP_REA_EST_ID IS NULL THEN 1 ELSE 0 END))
    FROM dbo.TBL_REAL_ESTATE_TAX_CLASSIFIER