Mysql 使用max+1为单个记录而不是表插入数据

Mysql 使用max+1为单个记录而不是表插入数据,mysql,sql,sql-server,Mysql,Sql,Sql Server,我需要根据2个参数更新一行。到目前为止,我的查询将在表外工作时使用MAX处理相关字段。 我很难将字段限制为所需的记录。参数为@ClientCode和@BillSeq以选择正确的记录 这是适用于表的查询 DECLARE @ClientCode char(4), @BillSeq int, @BillCommentSeq smallint, @Billcomment varchar(7500) SELECT @ClientCode = '00NJ'

我需要根据2个参数更新一行。到目前为止,我的查询将在表外工作时使用MAX处理相关字段。 我很难将字段限制为所需的记录。参数为@ClientCode和@BillSeq以选择正确的记录

这是适用于表的查询

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)
我得到这个错误:

无法将值NULL插入表的“BillCommentSeq”列中 'database.dbo.billcoment';列不允许空值。插入失败。 声明已终止

使用此修改的语句

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)
错误是:

关键字“where”附近的语法不正确


Billcomment表是否已经有记录?如果不匹配,或者如果没有匹配where子句,则Max将返回NULL。用isnull包装语句不确定MySql中是否存在,但我确信它在MySql中有对应的语句

对于不正确的语法错误,这基本上就是查询:

(select MAX(BillCommentSeq)  from billcomment) +1 
  where clientcode = @ClientCode and billseq = @BillSeq )
请注意,从billcomment开始后,初始洞口支撑是如何关闭的。Station的其余部分+1,其中。。。。在从billcomment部分选择MAXBillCommentSeq之外,因此语法无效


删除before+1,这将消除无效语法错误。

所有查询都是set操作,因此它们不是顺序查询。您在其中设置max+1值的select可能不“知道”@ClientCode和@BillSeq值。尝试将SELECT拆分为两个:

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)
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)

请尝试使用下面的代码

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)

感谢您的想法,但是我现在在“+”附近发现以下错误语法不正确。谢谢您,我也测试了这一错误。这返回错误,无法将值NULL插入到“database.dbo.billcoment”表的“billcomentseq”列中;列不允许空值。插入失败。该语句已终止。虽然此代码片段可以解决此问题,但它确实有助于提高您文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满您的代码,因为这会降低代码和解释的可读性!感谢您的努力,但是这也不起作用收到的错误如下“=”附近的语法不正确。我相信这是从这一部分选择@BillCommentSeq=MaxBillCommentSeq我知道这是一个真正的脑残编辑我的脚本并复制它我相信你会得到有效的输出非常感谢你现在我需要研究它,所以我明白你在使用MySQL或MS SQL Server吗?不要标记未涉及的产品。MySQL中的My不代表Mycrosoft。
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)