消息102,级别15,状态1,行1错误的语法附近' - '

时间:2015-11-03 15:02:47

标签: sql-server sql-server-2008

有人在这段代码中帮助我尝试执行,但它给了我很多错误

(2 row(s) affected)

(11942 row(s) affected)

(0 row(s) affected)

(0 row(s) affected)

(0 row(s) affected)

(0 row(s) affected)

(0 row(s) affected)

(0 row(s) affected)

(0 row(s) affected)

(1 row(s) affected)
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '-'.
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '-'.
Msg 102, Level 15, State 1, Line 2
Incorrect syntax near '-'.
Msg 156, Level 15, State 1, Line 5
Incorrect syntax near the keyword 'then'.
Msg 102, Level 15, State 1, Line 2
Incorrect syntax near '-'.
Msg 156, Level 15, State 1, Line 5
Incorrect syntax near the keyword 'then'.
Msg 102, Level 15, State 1, Line 2
Incorrect syntax near '-'.
Msg 156, Level 15, State 1, Line 5
Incorrect syntax near the keyword 'then'.
Msg 102, Level 15, State 1, Line 2
Incorrect syntax near '-'.
Msg 102, Level 15, State 1, Line 2
Incorrect syntax near '-'.
Msg 102, Level 15, State 1, Line 2
Incorrect syntax near '-'.
Msg 102, Level 15, State 1, Line 2
Incorrect syntax near '-'.

(1 row(s) affected)

代码:

USE [MyDB]
GO
/****** Object:  StoredProcedure [dbo].[pull_from_pos]    Script Date: 11/03/2015 17:32:48 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- Batch submitted through debugger: SQLQuery16.sql|7|0|C:\Users\ADMINI~1\AppData\Local\Temp\2\~vs4CCB.sql
ALTER  procedure [dbo].[pull_from_pos]
@srv nvarchar(50)
as
declare @sql nvarchar(max)
--declare  @srv nvarchar(50)
declare  @db nvarchar(50)
--select @srv=srvname+'.' from posmaster 
select @db='.'+dbname+'.dbo.' from posmaster
--delete from msg1

IF EXISTS (SELECT * FROM sys.tables WHERE name='bill_no_table') DROP TABLE bill_no_table 

set @sql='select bill_no into bill_no_table from '+ @srv+@db+'bill_mast where shift_id in (select shiftid from '+ @srv+@db +'shift_master where   status=''c'')'
exec sp_executesql @sql
--if NOT exists( select bill_no,count(*) from transactions group by bill_no having count(*)>1 )
--begin
--set identity_insert transactions on
set @sql ='MERGE  transactions AS a
USING (select bill_no,Qty,Barcode,Unit,Unit_Price,Net_Price,Hold_id,Tran_Type,Unit_Name,VOID,amt_disc,serial,Eserl,Cost,PRICE_OVR,N_Bar_Code,N_Item_Descr,N_Found_Flag,tax  from '+@SRV+@DB+'transactions) B
ON a.bill_no=b.bill_no 
when not matched and b.bill_no in (select bill_no from bill_no_table)
then insert(bill_no,Qty,Barcode,Unit,Unit_Price,Net_Price,Hold_id,Tran_Type,Unit_Name,VOID,amt_disc,serial,Eserl,Cost,PRICE_OVR,N_Bar_Code,N_Item_Descr,N_Found_Flag,tax) 
values(b.bill_no,b.Qty,b.Barcode,b.Unit,b.Unit_Price,b.Net_Price,b.Hold_id,b.Tran_Type,b.Unit_Name,b.VOID,b.amt_disc,b.serial,b.Eserl,b.Cost,b.PRICE_OVR,b.N_Bar_Code,b.N_Item_Descr,b.N_Found_Flag,b.tax);'
exec sp_executesql @sql
--set identity_insert transactions off
--end


if NOT exists( select bill_no,count(*) from bill_mast group by bill_no having count(*)>1 )
begin
set identity_insert bill_mast on
set @sql ='MERGE  bill_mast AS a
USING (select Bill_no,Cust_Id,Amt,Disc_amt,Net_Amt,Shift_Id,Loial_Points,Bill_Time,Cancled,Loial_Card,Loial_dis,user_id,CustomerName,CPR_No,Mobile_No,Office_No,Residence_No  from '+@SRV+@DB+'bill_mast) B
ON a.bill_no=b.bill_no 
when not matched and b.bill_no in (select bill_no from bill_no_table)
then insert(Bill_no,Cust_Id,Amt,Disc_amt,Net_Amt,Shift_Id,Loial_Points,Bill_Time,Cancled,Loial_Card,Loial_dis,user_id,CustomerName,CPR_No,Mobile_No,Office_No,Residence_No) 
values(b.Bill_no,b.Cust_Id,b.Amt,b.Disc_amt,b.Net_Amt,b.Shift_Id,b.Loial_Points,b.Bill_Time,b.Cancled,b.Loial_Card,b.Loial_dis,b.user_id,b.CustomerName,b.CPR_No,b.Mobile_No,b.Office_No,b.Residence_No);'
exec sp_executesql @sql
set identity_insert bill_mast off
end


--set identity_insert pos_bill_payment on
--if NOT exists( select bill_no,PAYMENTGIVEN,count(*)  from pos_bill_payment group by bill_no,PAYMENTGIVEN having count(*)>1 )
begin
set @sql ='MERGE  pos_bill_payment AS a
USING (select BILL_NO,PAYTYPE,PAYFCAMT,PAYamt,PAYMENTGIVEN,PAYMODETYPE,PAYMODE,card_no,BALANCE,RATE  from '+@SRV+@DB+'pos_bill_payment) B
ON a.bill_no=b.bill_no and a.PAYMENTGIVEN =b.PAYMENTGIVEN
when not matched and b.bill_no in (select bill_no from bill_no_table)
then insert(BILL_NO,PAYTYPE,PAYFCAMT,PAYamt,PAYMENTGIVEN,PAYMODETYPE,PAYMODE,card_no,BALANCE,RATE) 
values(b.BILL_NO,b.PAYTYPE,b.PAYFCAMT,b.PAYamt,b.PAYMENTGIVEN,b.PAYMODETYPE,b.PAYMODE,b.card_no,b.BALANCE,b.RATE);'
exec sp_executesql @sql
end

--set identity_insert pos_bill_payment off

if NOT exists( select shiftid,count(*) from shift_master group by shiftid having count(*)>1 )
begin
set identity_insert shift_master on
set @sql ='MERGE  shift_master AS a
USING (select Shiftid,shift_date,user_id,pos_id,Tstart,tend,status,disc_amt,tot_Float,Tot_Coll,Tot_Sales,Tot_Sales_Void,Tot_Sales_Return,NET_SALES,LN_DIS_AMT,LOYAL_DIS_AMT,TOT_FLOAT_LOCAL,TOT_FLOAT_FOR,TOT_FLOAT_OTHR,TOT_COLL_LOCAL,TOT_COLL_FOR,TOT_COLL_OTHR,TOT_FOR_PAY,TOT_LOC_PAY,TOT_PAY,TOT_OTHR_PAY,SHORTACCESS,tot_cc,tot_bd,tot_qtr,tot_kd,tot_sa,tot_uae,tot_chq,tot_cus,tot_usa,TOT_CN,No_Cust,TOTAMX  from '+@SRV+@DB+'shift_master) B
ON a.shiftid=b.shiftid 
when not matched and b.status=''c'' then insert(Shiftid,shift_date,user_id,pos_id,Tstart,tend,status,disc_amt,tot_Float,Tot_Coll,Tot_Sales,Tot_Sales_Void,Tot_Sales_Return,NET_SALES,LN_DIS_AMT,LOYAL_DIS_AMT,TOT_FLOAT_LOCAL,TOT_FLOAT_FOR,TOT_FLOAT_OTHR,TOT_COLL_LOCAL,TOT_COLL_FOR,TOT_COLL_OTHR,TOT_FOR_PAY,TOT_LOC_PAY,TOT_PAY,TOT_OTHR_PAY,SHORTACCESS,tot_cc,tot_bd,tot_qtr,tot_kd,tot_sa,tot_uae,tot_chq,tot_cus,tot_usa,TOT_CN,No_Cust,TOTAMX) 
values(b.Shiftid,b.shift_date,b.user_id,b.pos_id,b.Tstart,b.tend,b.status,b.disc_amt,b.tot_Float,b.Tot_Coll,b.Tot_Sales,b.Tot_Sales_Void,b.Tot_Sales_Return,b.NET_SALES,b.LN_DIS_AMT,b.LOYAL_DIS_AMT,b.TOT_FLOAT_LOCAL,b.TOT_FLOAT_FOR,b.TOT_FLOAT_OTHR,b.TOT_COLL_LOCAL,b.TOT_COLL_FOR,b.TOT_COLL_OTHR,b.TOT_FOR_PAY,b.TOT_LOC_PAY,b.TOT_PAY,b.TOT_OTHR_PAY,b.SHORTACCESS,b.tot_cc,b.tot_bd,b.tot_qtr,b.tot_kd,b.tot_sa,b.tot_uae,b.tot_chq,b.tot_cus,b.tot_usa,b.TOT_CN,b.No_Cust,b.TOTAMX);'
exec sp_executesql @sql
set identity_insert shift_master off
end


if NOT exists( select day_end_id,count(*) from day_end_master group by day_end_id having count(*)>1 )
begin
set identity_insert day_end_master on
set @sql ='MERGE  day_end_master AS a
USING (select day_end_id,Day_end_date,pos_id,Tstart,tend,status,disc_amt,tot_Float,Tot_Coll,Tot_Sales,Tot_Sales_Void,Tot_Sales_Return,NET_SALES,LN_DIS_AMT,LOYAL_DIS_AMT,TOT_FLOAT_LOCAL,TOT_FLOAT_FOR,TOT_FLOAT_OTHR,TOT_COLL_LOCAL,TOT_COLL_FOR,TOT_COLL_OTHR,TOT_LOC_PAY,TOT_FOR_PAY,TOT_OTHR_PAY,TOT_PAY,SHORTACCESS  from '+@SRV+@DB+'day_end_master) B
ON a.day_end_id=b.day_end_id 
when not matched and b.status=''c'' then insert(day_end_id,Day_end_date,pos_id,Tstart,tend,status,disc_amt,tot_Float,Tot_Coll,Tot_Sales,Tot_Sales_Void,Tot_Sales_Return,NET_SALES,LN_DIS_AMT,LOYAL_DIS_AMT,TOT_FLOAT_LOCAL,TOT_FLOAT_FOR,TOT_FLOAT_OTHR,TOT_COLL_LOCAL,TOT_COLL_FOR,TOT_COLL_OTHR,TOT_LOC_PAY,TOT_FOR_PAY,TOT_OTHR_PAY,TOT_PAY,SHORTACCESS) 
values(b.day_end_id,b.Day_end_date,b.pos_id,b.Tstart,b.tend,b.status,b.disc_amt,b.tot_Float,b.Tot_Coll,b.Tot_Sales,b.Tot_Sales_Void,b.Tot_Sales_Return,b.NET_SALES,b.LN_DIS_AMT,b.LOYAL_DIS_AMT,b.TOT_FLOAT_LOCAL,b.TOT_FLOAT_FOR,b.TOT_FLOAT_OTHR,b.TOT_COLL_LOCAL,b.TOT_COLL_FOR,b.TOT_COLL_OTHR,b.TOT_LOC_PAY,b.TOT_FOR_PAY,b.TOT_OTHR_PAY,b.TOT_PAY,b.SHORTACCESS);'
exec sp_executesql @sql
set identity_insert day_end_master off
end


if NOT exists( select day_end_id,count(*) from day_end_master group by day_end_id having count(*)>1 )
begin
set @sql ='MERGE shift_end_cash AS a
USING (select code,name,famt,lamt,shift_id  from '+@SRV+@DB+'shift_end_cash) B
ON a.code=b.code and a.shift_id=b.shift_id
when not matched then insert(code,name,famt,lamt,shift_id) 
values(b.code,b.name,b.famt,b.lamt,b.shift_id);'
exec sp_executesql @sql
end


if NOT exists( select User_id,count(*) from collection_master group by User_id having count(*)>1 )
begin
set @sql ='MERGE  collection_master AS a
USING (select User_id,User_Name,Pos_id,Shift_id,ddate,code,QTY,RATE,AMT,Colle_Type,usr,timestamp,Colle_Id,Total_amt,lblname,txtQNAME,TXTAMTNAME,status from '+@SRV+@DB+'collection_master) B
ON a.Colle_Id=b.Colle_Id and a.pos_id=b.pos_id
when not matched then insert(User_id,User_Name,Pos_id,Shift_id,ddate,code,QTY,RATE,AMT,Colle_Type,usr,timestamp,Colle_Id,Total_amt,lblname,txtQNAME,TXTAMTNAME,status) 
values(User_id,User_Name,Pos_id,Shift_id,ddate,code,QTY,RATE,AMT,Colle_Type,usr,timestamp,Colle_Id,Total_amt,lblname,txtQNAME,TXTAMTNAME,status);'
exec sp_executesql @sql
end


if NOT exists( select Float_Id,count(*) from float_master group by Float_Id having count(*)>1 )
begin
set identity_insert float_master on
set @sql ='MERGE  float_master AS a
USING (select User_id,User_Name,Pos_id,Shift_id,ddate,code,QTY,RATE,AMT,Float_Type,trn,usr,timestamp,Float_Id,Total_amt,lblname,txtQNAME,TXTAMTNAME,status  from '+@SRV+@DB+'float_master) B
ON a.User_id=b.User_id and a.pos_id=b.pos_id and a.shift_id=b.shift_id
when not matched then insert(User_id,User_Name,Pos_id,Shift_id,ddate,code,QTY,RATE,AMT,Float_Type,trn,usr,timestamp,Float_Id,Total_amt,lblname,txtQNAME,TXTAMTNAME,status) 
values(User_id,User_Name,Pos_id,Shift_id,ddate,code,QTY,RATE,AMT,Float_Type,trn,usr,timestamp,Float_Id,Total_amt,lblname,txtQNAME,TXTAMTNAME,status);'
exec sp_executesql @sql
set identity_insert float_master off
end


if NOT exists( select day_date,pos_id ,count(*) from pos_day_dates group by day_date,pos_id having count(*)>1 )
begin
--set identity_insert pos_day_dates on
set @sql ='MERGE  pos_day_dates AS a
USING (select  day_date,pos_id,status from '+@SRV+@DB+'pos_day_dates) B
ON a.day_date=b.day_date and a.pos_id=b.pos_id
when not matched and b.status=''c'' then insert(day_date,pos_id,status) 
values(b.day_date,b.pos_id,b.status);'
exec sp_executesql @sql
--set identity_insert pos_day_dates off
end




--set @sql ='MERGE  AS a
--USING (select   from '+@SRV+@DB+') B
--ON a.code=b.code
--when not matched then insert() 
--values();'
--exec sp_executesql @sql

1 个答案:

答案 0 :(得分:0)

@srv和@db 需要用方括号[]包装。假设你传递给sproc的东西在名字中有一个' - '。