在保存现下面的存储过程时,提示出错:错误7405:异类查询要求为连接设置ANSI_NULLS和ANSI_WARNINGS选工项。麻烦改改。CREATE PROCEDURE p_KaoQingDuiBi  AS
--参数变量
declare @b datetime,@e datetime,@empid varchar(100),@flag int,@count int--过程内变量
declare @p varchar(7600),@pd varchar(100),@d varchar(100),@s1 varchar(10),@s2 varchar(10)
set nocount on
IF OBJECT_ID('TEMPDB..#happen') IS NOT NULL DROP TABLE #happen--***此处传递变量
--@empid表示收发机号,如果是0表示查询这段时间内所有记录
--@flag是否加上时间,如果是0不加上,1加上
--s1,s2表示间隔符,@count表示取的轨迹几条记录,0表示所有记录
select @b='2010-9-10 00:00:00',@e='2010-9-11 00:00:00',@empid=0,@flag=1,@s1=';',@s2=',',@count=3--1、取考勤记录
select 部门=u3.fname,工号=u2.fnumber,姓名=u2.fname,职务=u4.fname,工种=u5.fname,下井时间=u1.fbegindate,上井时间=u1.fenddate,工时=case when datediff(hour,u1.fbegindate,u1.fenddate)=0 then '' else cast(datediff(hour,u1.fbegindate,u1.fenddate) as varchar(100))+'小时' end+cast(datediff(mi,u1.fbegindate,u1.fenddate)%60 as varchar(100))+'分钟',路径=cast('' as varchar(8000)) into #happen from t_workrecord u1 left join t_emp u2 on u1.fempid=u2.fempid
left join t_dept u3 on u2.fdeptid=u3.fdeptid
left join t_position u4 on u2.fpositionid=u4.fpositionid
left join t_duty u5 on u2.fdutyid=u5.fdutyid 
where fbegindate between @b and @e
and u2.fmobilenumber=case when @empid='0' then u2.fmobilenumber else cast(@empid as int) end--2、取轨迹信息
IF OBJECT_ID('TEMPDB..#siterecord') IS NOT NULL DROP TABLE #siterecord
select 工号=u2.fnumber,位置=u3.fposition,时间=u1.fbegindate into #siterecord from t_siterecord u1 
left join t_emp u2 on u1.fempid=u2.fempid
left join t_site u3 on u1.fspotid=u3.fspotid
where fbegindate between @b and @e
and u2.fmobilenumber=case when @empid='0' then u2.fmobilenumber else cast(@empid as int) end--3、将轨迹填充
IF OBJECT_ID('TEMPDB..#tmprecord') IS NOT NULL DROP TABLE #tmprecord
select 位置=cast('' as varchar(1000)),时间=cast('' as varchar(1000)) into #tmprecord where 1=0
DECLARE Cur_Emp CURSOR FOR 
select 工号,下井时间,上井时间 from #happen 
OPEN Cur_Emp
FETCH NEXT FROM Cur_Emp INTO @empid,@b,@e
WHILE @@FETCH_STATUS = 0
BEGIN
set @p='select '+case when @count=0 then '' else 'top '+cast(@count as varchar(100)) end+' 位置,convert(varchar(5),时间,008)+'''+@s2+''' from #siterecord u1 where 工号='+@empid+' order by 时间'
truncate table #tmprecord
insert into #tmprecord(位置,时间) exec(@p)
set @p=''
DECLARE Cur_Track CURSOR FOR
select 位置,时间 from #tmprecord
OPEN Cur_Track
FETCH NEXT FROM Cur_Track INTO @pd,@d
WHILE @@FETCH_STATUS = 0 and len(@p)<7500
BEGIN
set @p=@p+case when @p='' then '' else @s1 end+case when @flag=0 then '' else @d end+@pd
FETCH NEXT FROM Cur_Track INTO @pd,@d
END
CLOSE Cur_Track
DEALLOCATE Cur_Track
update #happen set 路径=@p where 工号=@empid
FETCH NEXT FROM Cur_Emp INTO @empid,@b,@e
END
CLOSE Cur_Emp
DEALLOCATE Cur_Emp--4、显示结果
--select 部门,工号,姓名,职务,工种,下井时间,上井时间,工时,路径 from #happen where 姓名='张海波' or 姓名='李根贵' order by 下井时间SELECT b.部门,a.工号,a.姓名,b.工种,a.入井时间,a.出井时间,b.下井时间,b.上井时间,b.路径,b.状态,a.出勤标志 from OpendataSource
('SQLOLEDB','Data Source=192.168.1.3;User ID=yt;Password=123456 ').mywt_mis_YM_RLZYXT_____.dbo.员工逐日考勤表B a 
left join
(select 部门,工号,姓名,职务,工种,下井时间,上井时间,工时,路径,case when  len(路径)-len(replace(路径,';',''))>=2 then '正' else '假' end as 状态  from #happen) b
on a.工号=b.工号 and convert(char(10),b.下井时间,120)=a.考勤日期 where  a.考勤日期 between '2010-09-10' and '2010-09-11' AND a.出勤标志 not in('1','2','3')
drop table #happen
drop table #siterecord
drop table #tmprecord
set nocount off
go

解决方案 »

  1.   

    把数据库直接提示出来的错误贴出来!不会单纯的就是这个吧:“错误7405:异类查询要求为连接设置ANSI_NULLS和ANSI_WARNINGS选工项。”
      

  2.   

    错误7405:异类查询要求为连接设置ANSI_NULLS和ANSI_WARNINGS选项 。请将确保一致的查询语义。请启用这些选项,然后重新发出查询。 这是在新建存储过程,检查语法通过,但点确定时提示的。
      

  3.   

    原文地址:异类查询要求为连接设置ANSI_NULLS和ANSI_WARNINGS选项异类查询要求为连接设置ANSI_NULLS和ANSI_WARNINGS选项在查询分析器中,先输入两句   
      set   ansi_nulls   on   
      set   ansi_warnings   on   
      执行然后再   
      Create   Proc   存储过程   
      然后     
      set   ansi_nulls   off   
      set   ansi_warnings   off   
      产生出来的存储过程就不会有这个问题 ========================================================注意:   
        
      “注意,是在查询分析器中执行   
        
      而不是企业管理器中执行”    注意:   
        
      ===================================   
      删除存储过程,然后在查询分析器中执行创建存储过程的语句就行了.   
      ====================================================   
        
      这句话没错,但如果存储过程已经创建了,也可以不用删除,把整个存储过程考到查询分析器中,把"Create"   改成   "alter"   ,然后执行,也可以 =======================================================================--存储过程中那了链接服务器,使用后又删除,这样做没有意义.   
        
      --还不如直接用openrowset   
        
      CREATE   PROCEDURE   test   
      as   
      select   top   10   *   from   openrowset('sqloledb','dl580-1';'sa';'tpcims',   movex12.dbo.mittra') 
      

  4.   

    最前面加上下面的内容试试
    SET ANSI_NULLS ON
    GO