以编程方式确定链接服务器是Oracle还是SQL Server

时间:2015-09-16 15:47:31

标签: sql-server oracle

这可能是一个奇怪的问题,但如果链接服务器是Oracle或SQL服务器,我怎么能在存储过程中确定?

为了给出一些上下文,我们有一个应用程序在生产中查询包含PID(个人身份信息)的链接服务器(Oracle服务器,而不是我们的),因此我们不允许在我们的开发和测试环境。遗憾的是,我们无法建立自己的Oracle服务器,因此在我们的测试环境中,我们设置了一个SQL Server实例,作为链接服务器,其中包含模拟数据。

对于99%的查询,除了包含此行的问题外,这不会导致任何问题

WHERE LAST_MODIFIED > TO_DATE(''''' + CONVERT(nvarchar(24), @maxImageDate, 120) + ''''',''''YYYY-MM-DD HH24:MI:SS'''')

我们通常在开发和测试环境中手动修改

WHERE LAST_MODIFIED > ''''' + CONVERT(nvarchar(24), @maxImageDate, 120) + '''''

我的第一个想法是尝试一个只能在oracle上运行的查询:

SELECT 1 FROM OPENQUERY(LinkedServerName, ''SELECT * FROM v$version'')

在TRY / CATCH中运行不同的查询,如果失败但导致事务即使在捕获错误后仍然不可用

我们开始使用octodeploy进行自动部署,我们可以让触手代理运行一个SQL脚本来修改SP,具体取决于环境,但我希望将所有逻辑和代码保留在SP内部,因此回购但如果我们无法找到另一种解决方案,我们可能会采用这种解决方案。

非常感谢任何帮助

2 个答案:

答案 0 :(得分:0)

lad2025为您提供了一个很好的答案,但如果您无法访问sys.servers,可以尝试


If (Select @@SERVERNAME) = 'YourProdServerNameHere'
Begin
--  Do prod server stuff
End
Else
Begin
--  Do dev and test server stuff
End

答案 1 :(得分:0)

使用此SELECT:

select product from sys.servers where srv_name='LINKED_SERVER_NAME'

产品为Microsoft SQL Server返回 MSSQL SQL Server

希望它有所帮助。