【问题标题】:Issue when using linked server to pass a parameterized dynamic query from SQL Server to a MySQL database使用链接服务器将参数化动态查询从 SQL Server 传递到 MySQL 数据库时出现问题
【发布时间】:2013-07-06 03:46:11
【问题描述】:

我正在尝试使用 SQL Server 数据库中的链接服务器查询 MySQL 数据库。我创建了一个参数化的动态 SQL 查询,当我运行它时,它不会出错,但它返回 0 行。

如果我对参数进行硬编码,它会为我请求的行返回数据。

当涉及到参数化查询时,处理 MySQL 有什么技巧吗?

此语法返回 0 行:

DECLARE @SQL NVARCHAR(MAX), 
        @Params VARCHAR(MAX)

SET @SQL = N'SELECT * FROM OPENQUERY(MYSQL, ''SELECT LoanNumber  
             FROM plms.vw__bid_dd_overlay 
             WHERE LoanNumber IN (@MyParams);'')'

SET @Params = '1000001289,1000001294,1000001296,1000001303,1000001304,1000001306,1000001308'; 

EXEC sp_executesql @SQL, N'@MyParams VARCHAR(MAX)', @Params

这会返回 7:

DECLARE @SQL NVARCHAR(MAX)

SET @SQL = N'SELECT * FROM OPENQUERY(MYSQL, ''SELECT LoanNumber  
                                              FROM plms.vw__bid_dd_overlay 
                                              WHERE LoanNumber IN  (1000001289,1000001294,1000001296,1000001303,1000001304,1000001306,1000001308);'')'

EXEC sp_executesql @SQL; 

任何帮助将不胜感激。

【问题讨论】:

    标签: mysql sql-server dynamic linked-server parameterized-query


    【解决方案1】:

    你需要准备 a 语句然后执行它:

    SET @Params = '1000001289,1000001294,1000001296,1000001303,1000001304,1000001306,1000001308'; 
    
    SET @SQL = CONCAT('SELECT LoanNumber  
             FROM plms.vw__bid_dd_overlay 
             WHERE LoanNumber IN (' , @MyParams , ' );';
    
    PREPARE statement FROM @SQL;
    
    EXECUTE statement;
    

    Reference to the mySQL manual

    【讨论】:

    • 根据您的答案中提供的语法,我相信您正在从 MySQL 转到 MSSQL?我在 MSSQL 中工作,我正在尝试从连接到 MySQL 服务器的链接服务器中提取数据。另外,我应该补充一点,我在 MSSQL 2008 R2 中。
    • 好吧,如果您正在查询 mySQL,您必须以 mySQL 可以理解的方式放置语句。您是否已经在 SQL Server 查询中尝试过字符串连接?
    • CONCAT 不是 MSSQL 2008 R2 中的有效语句。问题是由于我的逗号分隔的 id 列表对于链接服务器可以处理的内容来说太长了。它远远超过 8000 个字符,这是最大值。我可以使用我帖子中的第二种方法并使用 NTIME 和游标来获取我的所有数据,但性能不是很好。我对 NULL 或其他任何东西都没有问题,因此使用“+”连接我的数据可以正常工作。我只是希望使用参数化的动态 SQL 查询来绕过 8K 字符的限制。
    猜你喜欢
    • 2017-05-10
    • 2018-09-22
    • 1970-01-01
    • 2011-09-06
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多