代码之家  ›  专栏  ›  技术社区  ›  abeger

如何从SQLServer2000调用MySQL存储过程?

  •  0
  • abeger  · 技术社区  · 15 年前

    我有两个数据库,一个是MySQL 5,一个是SQL Server 2000。我已经将MySQL数据库映射为MS SQL数据库中的链接服务器。我想从MS SQL数据库调用保存在MySQL数据库中的存储过程。正确的语法是什么?甚至在SQLServer2000中也可以吗?

    编辑:

    我试过了

    EXEC webpush...clear_tables
    

    Could not execute procedure 'clear_tables' on remote server 'webpush'.
    [OLE/DB provider returned message: [MySQL][ODBC 3.51 Driver]
    [mysqld-5.0.46-enterprise-gpl-log]You have an error in your SQL syntax; 
    check the manual that corresponds to your MySQL server version for the 
    right syntax to use near '?=call "clear_tables";1' at line 1]
    

    即使我填写DB名称和所有者,我仍然得到相同的结果。

    2 回复  |  直到 15 年前
        1
  •  0
  •   Preet Sangha    15 年前

    我没有以这种方式使用链接服务器,但您能否不使用linked server.database.owner.procedure语法使用exec调用?

        2
  •  0
  •   paul Bibby paul Bibby    15 年前

    我想做一些类似的事情,所以即使这已经过时了,我想我还是会给其他搜索的人发个回复。 我找不到一种通过“…”符号运行存储过程的方法,但这很好

    下面是MySQL中一个简单的存储过程,用于在给定id的情况下更新数据库xxx测试表中记录的条形码字段:

    分隔符$$

    删除过程(如果存在) xxx . STP_products_Update_barcode $$ 创建定义器= root @ localhost xxx . (在 xid INT,在xbarcode varchar(25)中)BEGIN 更新测试集条形码=xbarcode
    其中id=xid;结束$$

    定界符;

    这是SQL Server中运行它的一个过程(我通常有TRY-CATCH块和其他错误捕获,但为了清楚起见,我省略了它。请注意,MYSQL\u XXX是一个从SQL Server设置到MYSQL的链接服务器:

    [STP_XXX_MySQLBarcode_Update]

    @产品标识int,@barcode varchar(20) AS BEGIN在DECLARE@SQL上设置NOCOUNT nvarchar(1000)

    SET @SQL = 'CALL STP_products_Update_barcode(' + CAST(@Product_id as varchar) + ','''+ @barcode +''')' EXEC (@SQL) AT MYSQL_XXX SET NOCOUNT OFF END GO

    我还没有掌握格式化代码的诀窍,现在我有点匆忙,但你明白了。。。