这可能是一个奇怪的问题,但如果链接服务器是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内部,因此回购但如果我们无法找到另一种解决方案,我们可能会采用这种解决方案。
非常感谢任何帮助
答案 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 。
希望它有所帮助。