1

我正在使用安装了开发人员和数据库版本的 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 实例。我们链接的数据库有大量我们永远不会使用的表。所以,如果可能的话,我想避免不得不为该数据库拉下整个模式。

我搜索时找到的信息似乎已过时。GDR 在过去一年中发生了很大变化,以前的 CTP 版本提供了很多指导,现在已经过时了。

4

2 回答 2

2

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

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)     
于 2009-02-09T13:33:20.993 回答
2

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

于 2009-09-09T18:57:47.367 回答