sql server语言 - OpenQuery和使用动态sql



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

无法确定元数据,因为语句'EXEC (@sQry)'在过程'spTest'中包含动态SQL。考虑使用WITH RESULT SETS子句显式地描述结果集。

我已经尝试了未定义的结果集,但仍然存在相同的错误。

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

是否有其他替代方法或解决方法?

有一个解决方法,但是您不会喜欢它。您需要创建一个包装器过程,它将定义元数据,并根据提供给包装器的列执行原始过程。这里有一个MSDN博客的链接,他们讨论了为sp_help_job做这个;

http://blogs.msdn.com/b/sqlagent/archive/2012/07/12/workaround - sql - server - 2012 - openrowset - msdb dbo - sp -帮助-工作-抛出error.aspx

它在2008年工作,因为SSIS和它类似的会在过程中寻找数据类型,2012年不这样做,如果有任何歧义,它想要的元数据。包装器将帮助您缓慢执行,但我建议将该过程更符合现代编码标准。不管怎样,希望这对你有帮助!

最新更新