CAS NULL与IS NULL不起作用

时间:2016-08-19 11:46:04

标签: sql sql-server sql-server-2005

如果值为NULL,我想给列提供一些值,我试过如下

insert into inward_doc_tracking_trl 
    (Mkey,Entry_Sr_No,N_UserMkey,N_Department,CStatus_Flag,Remarks,     
    CUser_Id,
    U_Datetime,NStatus_Flag,Delete_Flag, 
    CDept_Id,
    Ref_Mkey,No_Of_Days,Approved_Amount,Chq_No,Chq_dated,Chq_Bank,Chq_Amount,
    Vendor_MKey,Vendor_Comp_Mkey,Project_Mkey,Program_mkey,Payment_MKey,Due_Date,Updated_Remarks,Updated_Bill_no,
    Updated_Bill_Date,Updated_Bill_Amt,Party_Name,Acc_mkey,
    TotalDeductions,Broker_Mkey,Customer_Mkey,Payable_Amt,Balance_Amt)

     values (@inv_trl_mkey,@entry_sr_no,@Nuser_mkey,@n_department,@nstatus_flag2,@remarks,               
        CASE WHEN (@cuserid IS NULL) THEN 'YES' ELSE 'NO' END AS @cuserid,
    @u_datetime,@nstatus_flag,@delete_flag,     
        CASE WHEN (@cdept_id IS NULL) THEN 'YES' ELSE 'NO' END AS @cdept_id,
    @inv_hdr_mkey,@No_Of_Days,
     @Approved_Amount,@Chq_No,@Chq_dated,
     @Chq_Bank,@Chq_Amount,@Vendor_MKey,@Vendor_Comp_Mkey,@Project_Mkey,@Program_mkey,@Payment_MKey,@Due_Date  
    ,@Updated_Remarks,@Updated_Bill_no,@Updated_Bill_Date,@Updated_Bill_Amt,@Party_Name,
    @Acc_mkey,@TotalDeductions,@Broker_Mkey,@Customer_Mkey,@Payable_Amt,@Balance_Amt)  

但是收到错误

  

关键字' AS'

附近的语法不正确

5 个答案:

答案 0 :(得分:2)

从您的查询中删除" AS" ,因为您要在表格中插入,因此不再需要它。

 CASE WHEN (@cuserid IS NULL) THEN 'YES' ELSE 'NO' END

答案 1 :(得分:1)

如果我理解正确,您正在使用VALUES中声明的变量的值。如果你在那里做一些计算,你不应该这样说。

AS @cuserid

无论如何:你不能给这样的表达命名!

你必须区分

  • 使用变量的值和
  • 为表达式提供别名

VALUES中,您只提供一个值列表:

VALUES(@var1,@var2,@var3+5)

将使用@var1@var2的值,并将使用var3进行一些计算。 您不需要任何别名

更新

您可以考虑在为变量@cuserid设置值的位置执行此逻辑。在这种情况下,您可以在VALUES内使用此变量,而不必担心NULL是否... {/ p>

答案 2 :(得分:0)

正如错误所示,问题与CASE无关,而与AS无关。因此,请删除AS

 values (@inv_trl_mkey, @entry_sr_no, @Nuser_mkey, @n_department, @nstatus_flag2 ,@remarks,               
    (CASE WHEN (@cuserid IS NULL) THEN 'YES' ELSE 'NO' END),
     @u_datetime,@nstatus_flag,@delete_flag,     
    (CASE WHEN (@cdept_id IS NULL) THEN 'YES' ELSE 'NO' END),
    . . . 

VALUES()子句中命名表达式的值是没有意义的。

答案 3 :(得分:0)

插入inward_doc_tracking_trl     (MKEY,Entry_Sr_No,N_UserMkey,N_Department,CStatus_Flag,备注,
    CUser_Id,     U_Datetime,NStatus_Flag,Delete_Flag,     CDept_Id,     Ref_Mkey,NO_OF_DAYS,Approved_Amount,Chq_No,Chq_dated,Chq_Bank,Chq_Amount,     Vendor_MKey,Vendor_Comp_Mkey,Project_Mkey,Program_mkey,Payment_MKey,DUE_DATE,Updated_Remarks,Updated_Bill_no,     Updated_Bill_Date,Updated_Bill_Amt,Party_Name,Acc_mkey,     TotalDeductions,Broker_Mkey,Customer_Mkey,Payable_Amt,Balance_Amt)      选择(@ inv_trl_mkey,@ entry_sr_no,@ Nuser_mkey,@ n_department,@ nstatus_flag2,@ remarks,
        情况何时(@cuserid为空)然后'是''没有'结束作为cuserid,     @ u_datetime,@ nstatus_flag,@ delete_flag,
        情况何时(@cdept_id为空)那么'是'否则'否'结束为cdept_id,     @ inv_hdr_mkey,@ NO_OF_DAYS,      @ Approved_Amount,@ Chq_No,@ Chq_dated,      @ Chq_Bank,@ Chq_Amount,@ Vendor_MKey,@ Vendor_Comp_Mkey,@ Project_Mkey,@ Program_mkey,@ Payment_MKey,@ DUE_DATE
    @ Updated_Remarks,@ Updated_Bill_no,@ Updated_Bill_Date,@ Updated_Bill_Amt,@ Party_Name,     @ Acc_mkey,@ TotalDeductions,@ Broker_Mkey,@ Customer_Mkey,@ Payable_Amt,@ Balance_Amt)强文

答案 4 :(得分:0)

您的陈述是正确的,如果您需要使用 AS ,请不要使用 AS ,而不是使用 Abihabi87 <强>。最重要的一点是,当列数据类型为数字时,您无法在列内保存varchar数据。为此,您需要更改列的数据类型或在列内保存数值。例如你使用'是/否'而不是你可以使用'0/1'。