代码之家  ›  专栏  ›  技术社区  ›  hgulyan

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

  •  2
  • hgulyan  · 技术社区  · 14 年前

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

    我怎么能不使用这两种方法呢 执行 sp\u执行SQL ?

    SQL Server 2008 .

    非常感谢。

    更新

    我找到了一些链接

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

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

    正在使用 同义词 可能的解决方案?如果是的话,怎么做?

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

    更新3

    开放行集 开放数据源

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

    2 回复  |  直到 11 年前
        1
  •  1
  •   hgulyan    14 年前

    没人愿意回答,所以我会自己做,只是为了接受答案。

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

        2
  •  0
  •   shahkalpesh    14 年前

    OPENROWSET OPENDATASOURCE

    编辑:如果有效,可以在运行时更改数据库;使用当前连接执行查询。我看不到任何其他执行查询的方法。

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

        3
  •  0
  •   Diogo Bandeira França    4 年前
    /* 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