在存储过程中动态指定链接服务器和数据库名称

时间:2010-06-09 06:21:41

标签: sql-server dynamic-sql

我在存储过程中有一个查询需要根据一些参数在不同的服务器和数据库上执行。

如果不同时使用 exec ,也不使用 sp_executesql ,我该怎么做?

我正在使用 SQL Server 2008

谢谢。

更新

我找到了一些链接

http://www.eggheadcafe.com/software/aspnet/29397800/dynamically-specify-serve.aspx

http://www.sommarskog.se/dynamic_sql.html

使用 SYNONYM 可能的解决方案?如果是,那怎么样?

更新2

我忘了提到所有这些服务器都链接到存储存储过程的服务器。

更新3

OPENROWSET OPENDATASOURCE 也无法访问。我需要一个解决方案,而不需要构建查询字符串仲裁服务器名称,模式名称,数据库名称。

肯定可以通过在存储过程中使用if或case来完成,但如果我们有37个变体,那么这不是一个好的解决方案。

还有其他建议吗?

3 个答案:

答案 0 :(得分:1)

没有人想回答,所以我会自己做,只是为了接受回答。

没有办法做到这一点。您需要使用指定的建议之一,无论如何,查询必须通过连接生成。

答案 1 :(得分:0)

OPENROWSETOPENDATASOURCE有帮助吗?

编辑:如果可行,您可以在运行时更改数据库&使用当前连接执行查询。我看不到任何其他方式以你想要的方式执行查询。

使用字符串运行查询有什么问题,即动态查询?

答案 2 :(得分:0)

/* DO THIS FOR EACH TABLE IN THE PROCEDURE*/ 

--BEGIN TABLE_1  
DECLARE @LINKEDSERVER AS VARCHAR(50) 
 SET @LINKEDSERVER = DBO.FN_RETURN_SERVER('SBROUBLES')

DROP SYNONYM MYLINKEDSERVER
EXEC (' CREATE SYNONYM MYLINKEDSERVER FOR ' + @LINKEDSERVER + 'ANYDB.DBO.ANYTABLE')

--- END TABLE_1

-- UTILIZATION
SELECT COUNT(*) FROM MYLINKEDSERVER


--AND FN_RETURN_SERVER COULD BE ANY SELECT CASE ON SQL AS WELL
相关问题