当前位置: 代码迷 >> Sql Server >> 哪位高手能给小弟我检查一下,下面这个动态SQL有什么有关问题(待.)
  详细解决方案

哪位高手能给小弟我检查一下,下面这个动态SQL有什么有关问题(待.)

热度:94   发布时间:2016-04-27 16:22:57.0
谁能给我检查一下,下面这个动态SQL有什么问题(在线等待......)
declare   @sql1   varchar(8000)
declare     @FBrnoName     varchar(100)
declare   @FdateFrom   datetime
declare   @FdateEnd     datetime
declare   @FAccountNumberFrom   nvarchar(100)
declare   @FAccountNumberEnd   nvarchar(100)
set   @FBrnoName= '实业有限公司 '
set   @FdateFrom= '2007-01-01 '
set   @FdateEnd= '2007-01-31 '
set   @FAccountNumberFrom= '5101.001.001 '
set   @FAccountNumberEnd= '5101.005.002 '

set   @sql1   =   'Update   '[email protected]+ '..t_Voucher   set   FImportID=0   WHERE     FVoucherID   IN(select   DISTINCT   v.FVoucherID  
from   '[email protected]+ '..t_Voucher   v   INNER   JOIN       '[email protected]+ '..t_VoucherEntry     a     ON   v.FVoucherID=a.FVoucherID
  left   outer   join   '[email protected]+ '..   t_Account   b   on   a.FAccountID=b.FAccountID     where   v.Fdate   > =   ' ' '+convert(char(10),@FdateFrom,121)+ ' ' '
And   v.Fdate   <= '+convert(char(10),@FdateEnd,121)+ 'and   b.Fnumber   > =   ' ' '[email protected]+ ' ' '
And   b.Fnumber   <= ' ' '[email protected]+ ' ' ') '
EXEC(@sql1)

------解决方案--------------------
print(@sql1) 出来后没有语法错啊.


------解决方案--------------------
declare @sql1 nvarchar(4000)
declare @FBrnoName nvarchar(100)
declare @FdateFrom datetime
declare @FdateEnd datetime
declare @FAccountNumberFrom nvarchar(100)
declare @FAccountNumberEnd nvarchar(100)
set @FBrnoName=N '实业有限公司 '
set @FdateFrom= '2007-01-01 '
set @FdateEnd= '2007-01-31 '
set @FAccountNumberFrom= '5101.001.001 '
set @FAccountNumberEnd= '5101.005.002 '

set @sql1 = 'Update '[email protected]+ '..t_Voucher set FImportID=0 WHERE FVoucherID IN(select DISTINCT v.FVoucherID
from '[email protected]+ '..t_Voucher v INNER JOIN '[email protected]+ '..t_VoucherEntry a ON v.FVoucherID=a.FVoucherID
left outer join '[email protected]+ '.. t_Account b on a.FAccountID=b.FAccountID where v.Fdate > = ' ' '+convert(char(10),@FdateFrom,121)+ ' ' '
And v.Fdate <= ' ' '+convert(char(10),@FdateEnd,121)+ ' ' ' and b.Fnumber > = ' ' '[email protected]+ ' ' '
And b.Fnumber <= ' ' '[email protected]+ ' ' ') '
print @sql1
EXEC(@sql1)

------解决方案--------------------
convert(char(10),@FdateEnd,121) 两边少了引号
------解决方案--------------------
declare @sql1 varchar(8000)
declare @FBrnoName varchar(100)
declare @FdateFrom datetime
declare @FdateEnd datetime
declare @FAccountNumberFrom nvarchar(100)
declare @FAccountNumberEnd nvarchar(100)
set @FBrnoName= '实业有限公司 '
set @FdateFrom= '2007-01-01 '
set @FdateEnd= '2007-01-31 '
set @FAccountNumberFrom= '5101.001.001 '
set @FAccountNumberEnd= '5101.005.002 '

set @sql1 = 'Update v set FImportID=0 WHERE FVoucherID IN(select DISTINCT v.FVoucherID
from '[email protected]+ '..t_Voucher v INNER JOIN '[email protected]+ '..t_VoucherEntry a ON v.FVoucherID=a.FVoucherID