我有我的程序,我得到这个错误,有人可以帮忙吗?
create procedure [dbo].[insert_pohead] @entry_no int
as
begin
declare @VendorID varchar(100);
declare @userr nvarchar(25);
declare @podamt decimal(8,2)
set @podamt = (select SUM(linetotal) as Totalamt
from po_detail
where entry_no = @entry_no)
set @userr = (select userr
from po_detail
where entry_no = @entry_no)
set @VendorID = (select VendorID
from po_detail
where entry_no = @entry_no)
insert into po_head(entry_no, SubTotal, valid, approved, EmployeeID, VendorID)
values(@entry_no, @podamt, '1', '1', @userr, @VendorID)
end
GO
答案 0 :(得分:2)
由于填充变量的所有查询都使用where子句中的相同过滤器引用同一个表,因此您可以按如下方式重写过程:
create procedure [dbo].[insert_pohead] @entry_no int
as
begin
insert into po_head (entry_no, SubTotal, valid, approved, EmployeeID, VendorID)
select @entry_no, SUM(linetotal) as Totalamt, '1','1', userr, VendorID
from po_detail
where entry_no=@entry_no
group by userr, VendorID
end
答案 1 :(得分:0)
以下查询必须返回一项 - 您可以添加top 1
以确保:
set @userr = (select top 1 userr
from po_detail
where entry_no = @entry_no)
set @VendorID = (select top 1 VendorID
from po_detail
where entry_no = @entry_no)
注意:您需要验证这些查询返回的项目是否符合您的要求,如果需要,您可以按部分添加另一个过滤器/顺序,以确保实际返回单行。
答案 2 :(得分:-2)
如果使用SQL Server
set @userr = (select Top 1 userr
from po_detail
where entry_no = @entry_no)
set @VendorID = (select Top 1 VendorID
from po_detail
where entry_no = @entry_no)
如果我的SQL
set @userr = (select userr
from po_detail
where entry_no = @entry_no limit by 1)
set @VendorID = (select Top 1 VendorID
from po_detail
where entry_no = @entry_no limit by 1)