语法是没有错的,有如下要求:
1.你要先创建链接服务器: opo0022.出错信息是:"错误7405:异类查询要求为连接设置ANSI_NULLS和ANSI_WARNINGS选项
  出现这个问题,你需要删除存储过程,然后在查询分析器中执行创建存储过程的语句就行了
  或者先删除存储过程,再"在数据库上设置了ANSI warning打勾和ANSI nulls打勾'",再创建存储过程

解决方案 »

  1.   

    insert into opendatesource('sqloledb','data source=opo002;user id=aaa;password=12345').oldzh.dbo.ZH select * from ZH where days<=@EdayStr and basaenum=@PartNum,
      

  2.   

    注意,一定要先删除存储过程,因为存储过程会保存创建存储过程时, ANSI_NULLS和ANSI_WARNINGS 的设置,所以如果你不删除,仅改变 ANSI_NULLS和ANSI_WARNINGS 的设置是无效的.
      

  3.   

    參考一個例子
    CREATE PROC dbo.procInsert 
    (@orderNo varchar(4),@orderName varchar(20),@orderNum numeric(10,2))
    AS
    BEGIN TRAN
    SET NOCOUNT ON
    SET ANSI_WARNINGS OFFINSERT INTO  opendatasource('sqloledb','data source=sprogram;user ID=develop;Password=12345').數據庫名.dbo.TabY(order_no,order_name,order_num)
    VALUES(@OrderNo,@OrderName,@OrderNum)
    IF @@ERROR<>0  GOTO errhandle
    COMMIT TRAN
    SELECT 1errhandle:
    IF @@ERROR<>0
    BEGIN
    ROLLBACK TRAN
    SELECT 0
    ENDGO--成功返回1,失敗返回0
      

  4.   

    邹建大哥:你说的要先创建链接服务器: opo002,应该怎样建这个链接?我已经试过删除存储过程再建,但结果还是这样出错
      

  5.   

    大概就是这个:在创建或更改存储过程时,SQL Server 将保存 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 的设置。执行存储过程时,将使用这些原始设置。因此,所有客户端会话的 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 设置在执行存储过程时都将被忽略。在存储过程中出现的 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 语句不影响存储过程的功能。其它 SET 选项(例如 SET ARITHABORT、SET ANSI_WARNINGS 或 SET ANSI_PADDINGS)在创建或更改存储过程时不保存。如果存储过程的逻辑取决于特定的设置,应在过程开头添加一条 SET 语句,以确保设置正确。从存储过程中执行 SET 语句时,该设置只在存储过程完成之前有效。之后,设置将恢复为调用存储过程时的值。这使个别的客户端可以设置所需的选项,而不会影响存储过程的逻辑。
      

  6.   

    很少在企业管理器中创建存储过程,你试试这样,应该也可以的set ARITHABORT on
    SET ANSI_WARNINGS on
    SET ANSI_PADDINGS on
    go
    CREATE PROCEDURE [dbo].[PROCEDURE NAME] AS select 1
    GO
      

  7.   

    试试这样的解决办法
    參考一個例子
    CREATE PROC dbo.procInsert 
    (@orderNo varchar(4),@orderName varchar(20),@orderNum numeric(10,2))
    AS
    BEGIN TRAN
    SET NOCOUNT ON
    SET ANSI_WARNINGS OFF   ----把这一句改了INSERT INTO  opendatasource('sqloledb','data source=sprogram;user ID=develop;Password=12345').數據庫名.dbo.TabY(order_no,order_name,order_num)
    VALUES(@OrderNo,@OrderName,@OrderNum)
    IF @@ERROR<>0  GOTO errhandle
    COMMIT TRAN
    SELECT 1errhandle:
    IF @@ERROR<>0
    BEGIN
    ROLLBACK TRAN
    SELECT 0
    ENDGO--成功返回1,失敗返回0
    --将上面的一句改成下面的再试试看SET ANSI_WARNINGS ON