1

我可以通过以下方式连接到链接服务器:

SELECT testNo, soruTuruId, soruNo, cevap , degerlendirenTcNo, degerlendirilenTcNo 从 OPENDATASOURCE('SQLOLEDB', 'Data Source=192.168.150.42;User ID=readerUser;Password=1').akreditasyon.dbo.tblPerfCevap

但我必须将密码作为参数传递。我尝试这样:

SET @connectionString = '数据源=192.168.150.42;用户ID=readerUser;密码='+@pw

从 OPENDATASOURCE('SQLOLEDB', @connectionString ).akreditasyon.dbo.tblPerfCevap 中选择 testNo, soruTuruId, soruNo, cevap, degerlendirenTcNo, degerlendirilenTcNo

SELECT testNo, soruTuruId, soruNo, cevap , degerlendirenTcNo, degerlendirilenTcNo 从 OPENDATASOURCE('SQLOLEDB', 'Data Source=192.168.150.42;User ID=readerUser;Password='+@pw).akreditasyon.dbo.tblPerfCevap

但没用:S

有人有想法吗?

4

2 回答 2

0

这是我对 Ojulari 答案的工作实施。我希望在我们的 Prod、QA 等环境中运行相同的存储过程,每个人都需要访问不同的 BizTalk Server 数据库。

declare @DataSource varchar(100)
set @DataSource = 
    case 
        when dbo.GetEnvironment() = 'PROD' then 'Data Source=ProdBizTalkServer;UID=test;PWD=test'
        when dbo.GetEnvironment() = 'QA'   then 'Data Source=QABizTaklServer;UID=test;PWD=test'
        ELSE null
    end       
declare @myExec varchar(max) 
set @myExec =   'select 
                    nvcMessageType,
                    COUNT(*) 
                    from OpenDataSource(''SQLNCLI10'',''' + @DataSource + ''').BizTalkMsgBoxDb.dbo.Spool
                    where nvcMessageType like ''%#FlightMessageReceivedEvent''
                    group BY nvcMessageType
                    order by nvcMessageType 
            '  
print '@myExec=' + IsNull(@myExec,'null') 

EXEC(@myExec)
于 2013-10-25T15:14:48.513 回答
0

使用 exec() 函数运行查询。将您的查询包装成一个有效的字符串。

于 2011-02-26T02:46:06.327 回答