2016-08-25 30 views
-1

我需要根據2個參數更新一行。到目前爲止,我的查詢將在處理表格時使用MAX作爲問題字段。 我很難將字段限制爲所需的記錄。該參數是@ClientCode和@BillSeq選擇正確的記錄使用max +1插入數據的單個記錄不是表

這是爲表

DECLARE @ClientCode char(4), @BillSeq int, @BillCommentSeq smallint, @Billcomment varchar(7500) 
SELECT 
       @ClientCode = '00NJ' 
       ,@BillSeq = 1 
       ,@BillCommentSeq = (select MAX(BillCommentSeq) +1 from billcomment) 
       ,@Billcomment = (Select convert (varchar,getdate(),10) +' '+ 'Re-invoiced bill adjusting fees to 0') 


INSERT into dbo.BillComment VALUES (@ClientCode, @BillSeq, @BillCommentSeq, '' , @Billcomment) 

我的預期但下面的查詢工作它不

DECLARE @ClientCode char(4), @BillSeq int, @BillCommentSeq smallint, @Billcomment varchar(7500) 
SELECT 
       @ClientCode = '00NJ' 
       ,@BillSeq = 1 
       ,@BillCommentSeq = (select MAX(BillCommentSeq) +1 from billcomment where clientcode = @ClientCode and billseq = @BillSeq) 
       ,@Billcomment = (Select convert (varchar,getdate(),10) +' '+ 'Re-invoiced bill adjusting fees to 0') 


INSERT into dbo.BillComment VALUES (@ClientCode, @BillSeq, @BillCommentSeq, '' , @Billcomment) 
作品查詢

我得到這個錯誤:

Cannot insert the value NULL into column 'BillCommentSeq', table 'database.dbo.BillComment'; column does not allow nulls. INSERT fails. The statement has been terminated.

使用該改造的聲明

DECLARE @ClientCode char(4), @BillSeq int, @BillCommentSeq smallint, @Billcomment varchar(7500) 
SELECT 
       @ClientCode = '00NJ' 
       ,@BillSeq = 1 
       ,@BillCommentSeq = (select MAX(BillCommentSeq) from billcomment) +1 where clientcode = @ClientCode and billseq = @BillSeq) 
       ,@Billcomment = (Select convert (varchar,getdate(),10) +' '+ 'Re-invoiced bill adjusting fees to 0') 


INSERT into dbo.BillComment VALUES (@ClientCode, @BillSeq, @BillCommentSeq, '' , @Billcomment) 

的錯誤是這樣的:

Incorrect syntax near the keyword 'where'.

+2

您使用的是MySQL還是MS SQL Server? (不要標記不涉及的產品。) – jarlh

+0

MySQL中的「我的」不代表「Mycrosoft」。 – tadman

回答

0
 DECLARE @ClientCode char(4), 
       @BillSeq int, 
       @BillCommentSeq smallint, 
       @Billcomment varchar(7500) 

     Set  @ClientCode = '00NJ' 
     Set  @BillSeq = 1 

     SELECT @BillCommentSeq=Max(BillCommentSeq) 
     FROM billcomment 
     where clientcode = @ClientCode and billseq = @BillSeq 

     IF @BillCommentSeq Is NUll 
      SET @BillCommentSeq=1 
     Else 
      Select @BillCommentSeq = Max(BillCommentSeq) + 1 
      FROM billcomment 
      where clientcode = @ClientCode 
        and billseq = @BillSeq 

      Select @Billcomment = (Select convert (varchar,getdate(),10) + 'Re-  invoiced bill adjusting fees to 0') 
      Print @Billcomment 

      INSERT into BillComment 
      Select @ClientCode,@BillSeq,@BillCommentSeq,@Billcomment 

      Select * from BillComment 
+0

謝謝您的努力,但是這也不起作用收到的錯誤如下:'='附近的語法錯誤。我相信是從這一部分選擇@BillCommentSeq = Max(BillCommentSeq)我知道這是一個真正的大腦剋星 –

+0

編輯我的腳本並複製它我相信你會得到輸出 –

+0

這工作謝謝你,現在我需要研究它,所以我明白它 –

0

是否Billcomment表已經有記錄?如果不是,或者如果沒有匹配where子句,那麼Max()將返回NULL。 。包裹語句ISNULL()(不知道這在MySQL確實存在,但除此之外,我敢肯定,它在MySQL中的對應

至於不正確的語法錯誤,這是基本的查詢:

(select MAX(BillCommentSeq) from billcomment) +1 
    where clientcode = @ClientCode and billseq = @BillSeq) 

注意初始開括號是如何from billcomment後關閉。所述statment +1 where ....的其餘部分是外側部分(select MAX(BillCommentSeq) from billcomment),因此是無效的語法。

1前取出)和應克擺脫無效的語法錯誤。

+0

謝謝你的想法,但我現在得到以下錯誤'+'附近的語法不正確。 –

0
DECLARE @ClientCode char(4), @BillSeq int, @BillCommentSeq smallint, @Billcomment varchar(7500) 
SELECT 
      @ClientCode = '00NJ' 
      ,@BillSeq = 1 
      ,@BillCommentSeq = (select MAX(BillCommentSeq) +1 from billcomment where clientcode = @ClientCode and billseq = @BillSeq) 
      ,@Billcomment = (Select convert (varchar,getdate(),10) +' '+ 'Re-invoiced bill adjusting fees to 0') 


INSERT into dbo.BillComment VALUES (@ClientCode, @BillSeq, IFNULL(@BillCommentSeq,0), '' , @Billcomment) 
+0

謝謝我測試了這個以及返回錯誤無法將值NULL插入到'BillCommentSeq'列'database.dbo.BillComment'列中;列不允許有空值。 INSERT失敗。 該語句已終止。 –

+0

儘管此代碼片段可能會解決問題,但[包括解釋](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。也請儘量不要使用解釋性註釋來擠佔代碼,因爲這會降低代碼和解釋的可讀性! – FrankerZ

0

所有查詢都設定操作,使它們不按順序的。您設置最大+1值的選擇可能無法「知道」@ClientCode@BillSeq值。嘗試將SELECT分爲兩部分:

DECLARE @ClientCode char(4), @BillSeq int, @BillCommentSeq smallint, @Billcomment varchar(7500) 

SELECT @ClientCode = '00NJ', 
     @BillSeq = 1 

SELECT @BillCommentSeq = (select max(BillCommentSeq)+1 from billcomment where clientcode = @ClientCode and billseq = @BillSeq), 
     @Billcomment = (select convert(varchar, getdate(), 10) +' '+ 'Re-invoiced bill adjusting fees to 0') 


INSERT into dbo.BillComment VALUES (@ClientCode, @BillSeq, @BillCommentSeq, '' , @Billcomment) 
0

請嘗試使用以下代碼。

DECLARE @ClientCode char(4), @BillSeq int, @BillCommentSeq smallint, @Billcomment varchar(7500) 
SET @ClientCode = '00NJ' 
SET @BillSeq = 1 

SELECT @BillCommentSeq = MAX(ISNULL(BillCommentSeq,0)) +1 from billcomment 
WHERE clientcode = @ClientCode and billseq = @BillSeq 
       , 
SELECT @Billcomment = convert (varchar,getdate(),10) +' '+ 'Re-invoiced bill adjusting fees to 0' 


INSERT into dbo.BillComment VALUES (@ClientCode, @BillSeq, @BillCommentSeq, '' , @Billcomment) 
相關問題