OpenQuery 和使用动态 SQL

OpenQuery and using dynamic SQL

我们正在尝试迁移到 SQL Server 2014。在某些情况下,我们需要使用 OpenQuery 来返回动态结果。根据不同的输入参数,结果集会有所不同。它在 sql 2008R2 中工作,我需要让它继续工作但是有以下错误我无法解决。

The metadata could not be determined because statement 'EXEC (@sQry)' in procedure 'spTest' contains dynamic SQL. Consider using the WITH RESULT SETS clause to explicitly describe the result set.

我试过With Result sets undefined,但还是有同样的错误。

SELECT * INTO tblTest 
    FROM OPENQUERY(LinkedServer, 'SET FMTONLY OFF  EXEC spTest ''27'', null, null, null, ''%, Employed'' WITH RESULT SETS UNDEFINED')

是否有任何替代方案或解决方法。
提前谢谢你。

有变通办法,但您不会喜欢它。您需要创建一个包装程序,它将定义元数据并根据提供给包装器的列执行原始程序。这是一个 Link 的 MSDN 博客,他们在其中讨论为 sp_help_job 做这件事;

http://blogs.msdn.com/b/sqlagent/archive/2012/07/12/workaround-sql-server-2012-openrowset-on-msdb-dbo-sp-help-job-throws-error.aspx

它在 2008 年起作用,因为 SSIS 及其同类产品会在过程中查找数据类型,2012 年不会那样玩,如果它想要元数据有任何歧义的话。包装器将帮助您一瘸一拐地前进,但我建议使该过程更符合现代编码标准。无论如何希望有所帮助!