我需要根据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.BillComment';列不允许空值。 INSERT失败。 声明已经终止。
使用此修改后的声明
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'附近的语法不正确。
答案 0 :(得分:0)
Billcomment表是否已有记录?如果不匹配,或者如果没有匹配where子句,则Max()将返回NULL。用isnull()包装语句(不确定MySql中是否存在该语句,否则我确定它在MySql中有对应的语句。
对于不正确的语法错误,这基本上是查询:
(select MAX(BillCommentSeq) from billcomment) +1
where clientcode = @ClientCode and billseq = @BillSeq )
请注意from billcomment
后初始左大括号是如何关闭的。其余的语句+1 where ....
(select MAX(BillCommentSeq) from billcomment)
部分,因此语法无效。
在+1之前移除)
,这应该消除无效的语法错误。
答案 1 :(得分: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)
答案 2 :(得分: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
答案 3 :(得分: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)
答案 4 :(得分: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)