如何解决VSTS DB项目中的4部分名称链接服务器查询错误?

时间:2009-02-04 16:19:37

标签: sql-server visual-studio-2008 linked-server

我正在使用VSTS 2008,同时安装了开发人员和数据库版本。我安装了DB版GDR(版本9.0.31124)。我们在代码中有几个地方可以引用链接服务器(DB2主机,iSeries和SQL Server)。一个这样的例子是我们在商店过程中的代码:

SELECT VendorID   
INTO     #tmpVendors   
FROM    DataWhse.BIDataWhse.BP.Vendors   
WHERE  EffectiveDate < DATEADD(day, -1, DATEADD(month, 1, CAST(LTRIM(RTRIM(CAST(@Month AS CHAR(2)))) + '/01/' + CAST(@YEAR AS CHAR(4)) AS DATETIME)))   
AND     ExpirationDate > CAST(LTRIM(RTRIM(CAST(@Month AS CHAR(2)))) + '/01/' + CAST(@YEAR AS CHAR(4)) AS DATETIME) 

我在这类代码上遇到了未解决的引用错误(TSD03006)。目前有关如何处理此类链接服务器引用的建议是什么?在这种情况下,我们正在处理另一个SQL Server 2005实例。我们链接的数据库有大量我们从未使用过的表。所以,如果可能的话,我想避免必须为该数据库下拉整个架构。

我搜索时发现的信息似乎已经过时了。去年,德意志民主党的变化如此之大,以前的CTP版本有很多指导,现在已经过了很多。

2 个答案:

答案 0 :(得分:2)

我终于解决了这个问题。我创建了一个名为BIDataWhse的数据库项目,添加了一个bp架构,添加了一个bp用户,并添加了bp.vendors表定义。然后编译该项目并向我收到错误的项目添加了db引用。在引用中,我为服务器和数据库指定了变量,并允许变量替换。结果代码是:

SELECT VendorID      
INTO     #tmpVendors      
FROM    [$(DataWhse)].[$(BIDataWhse)].BP.Vendors      
WHERE  EffectiveDate < DATEADD(day, -1, DATEADD(month, 1, CAST(LTRIM(RTRIM(CAST(@Month AS CHAR(2)))) + '/01/' + CAST(@YEAR AS CHAR(4)) AS DATETIME)))      
AND     ExpirationDate > CAST(LTRIM(RTRIM(CAST(@Month AS CHAR(2)))) + '/01/' + CAST(@YEAR AS CHAR(4)) AS DATETIME)     

答案 1 :(得分:2)

要扩展这种情况,“添加数据库参考”将为您完成大部分工作。您需要为链接数据库创建项目并从数据库导入db模式(或者如果您不想执行整个数据库,则导入所需表的脚本)。 “在引用中我为服务器和数据库指定了变量并允许变量替换” - 这意味着在Add DB Ref对话框中,您可以检查Define Server Variable,Define Database Variable和Update Schema Objects and Scripts。输入变量的名称(它将用$(..)括起来)并输入要替换的值(生成部署脚本时要插入的真实服务器/数据库名称)。 Update选项将使其通过您的项目并编辑所有脚本以使用变量替换服务器/数据库名称。凉爽。