0

我正在创建一个 Web 应用程序,我在其中使用 insert into select 命令

为此我采用了一个看起来像这样的存储过程

alter PROCEDURE profinalinstexpensesonid      
(                    
@from varchar(5000),                    
@to varchar(5000),                    
@trainer varchar(5000),      
@sonvinid varchar(5000),  
@button varchar(5000),
@bill_id varchar(5000)               
)                
AS                    
BEGIN      
if(@button='allselect')  
begin  
insert into listinvoice(sonvinid,tid,date,brandname,zone,location,area,venuename,venue,instructore,amount)    
select                     
instructoreexpense.sonvinid,    
sonvininsert.trainer,                   
convert(varchar,sonvininsert.date,105) as date ,                    
sonvininsert.brandname,                    
substring(sonvininsert.zone,1,1)as zone,                    
sonvininsert.location,                    
sonvininsert.area,                    
companysonvinunitvenue.venuename,                  
sonvininsert.venue,                    
sonvininsert.instructore,                                
instructoreexpense.amount      
from                     
instructoreexpense                     
left outer join sonvininsert on                     
sonvininsert.sonvinid=instructoreexpense.sonvinid and                     
sonvininsert.status='0'                      
left outer join finalinstructoreexpense on                     
finalinstructoreexpense.sonvinid=instructoreexpense.sonvinid                      
left outer join companysonvinunitvenue on                     
companysonvinunitvenue.id=sonvininsert.comsonvinid      
where                     
sonvininsert.sonvinid not in(select sonvinid from listinvoice)    
and    
sonvininsert.date                     
between convert(datetime,@from,105) and                     
convert(datetime,@to,105) and                     
sonvininsert.trainer=(select empname from trainerdetails where trid=@trainer)      
and instructoreexpense.sonvinid NOT IN (      
            SELECT CAST(Item AS INTEGER)      
            FROM SplitString(@sonvinid, ',')      
      )      
order by instructoreexpense.sonvinid 


end  
end

现在这工作得很好,现在就在这条线上

insert into listinvoice(sonvinid,tid,date,brandname,zone,location,area,venuename,venue,instructore,amount)    

我想添加 bill_id

我将从程序中的文本框中获取我的 bill_id

所以我想把这条线改成这样

insert into listinvoice(sonvinid,tid,date,brandname,zone,location,area,venuename,venue,instructore,amount,bill_id=@bill_id)

但我对错误感到困惑

消息 102,级别 15,状态 1,过程 profinalinstexpensesonid,第 14 行 '=' 附近的语法不正确。

我需要做什么,

我正在从我的文本框中获取 bill_id,

还有其他选择吗???

4

2 回答 2

1

问题在于您的INSERT陈述:

insert into listinvoice(sonvinid,tid,date,brandname,zone,
location,area,venuename,venue,instructore,amount,bill_id=@bill_id)

你还没有完成声明。您通常会像这样格式化它:

INSERT INTO (Col1, Col2, Col3) VALUES (@Val1, @Val2, @Val3)

您将首先在第一组中列出要为其提供值的列,然后在关键字VALUES) 之后的第二组中列出值本身。

在您的列表中,您似乎列出了要插入的列,但最后一列除外,您还试图在其中以某种方式分配值。你需要这样的东西:

insert into listinvoice(sonvinid,tid,date,brandname,zone,
location,area,venuename,venue,instructore,amount,bill_id)
VALUES (@sonvinid, ..., @bill_id)

显然你会用你的实际参数替换省略号。

于 2017-01-19T12:43:03.527 回答
0

你必须改变你的说法。您目前正在这样做:

insert into listinvoice(sonvinid,tid,date,brandname,zone,location,area,venuename,venue,instructore,amount,bill_id=@bill_id)

它应该是这样的:

insert into listinvoice(sonvinid,tid,date,brandname,zone,location,area,venuename,venue,instructore,amount,bill_id)
select                     
instructoreexpense.sonvinid,    
sonvininsert.trainer,                   
convert(varchar,sonvininsert.date,105) as date ,                    
sonvininsert.brandname,                    
substring(sonvininsert.zone,1,1)as zone,                    
sonvininsert.location,                    
sonvininsert.area,                    
companysonvinunitvenue.venuename,                  
sonvininsert.venue,                    
sonvininsert.instructore,                                
instructoreexpense.amount,
@bill_id
from                     
instructoreexpense                     
left outer join sonvininsert on                     
sonvininsert.sonvinid=instructoreexpense.sonvinid and                     
sonvininsert.status='0'                      
left outer join finalinstructoreexpense on                     
finalinstructoreexpense.sonvinid=instructoreexpense.sonvinid                      
left outer join companysonvinunitvenue on                     
companysonvinunitvenue.id=sonvininsert.comsonvinid      
where                     
sonvininsert.sonvinid not in(select sonvinid from listinvoice)    
and    
sonvininsert.date                     
between convert(datetime,@from,105) and                     
convert(datetime,@to,105) and                     
sonvininsert.trainer=(select empname from trainerdetails where trid=@trainer)      
and instructoreexpense.sonvinid NOT IN (      
            SELECT CAST(Item AS INTEGER)      
            FROM SplitString(@sonvinid, ',')      
      )      
order by instructoreexpense.sonvinid 
于 2017-01-19T12:45:03.357 回答