如何传递OPENDATASOURCE的参数

时间:2010-05-31 14:28:06

标签: linked-server parameter-passing

我可以用这个连​​接到链接服务器:

SELECT testNo,soruTuruId,soruNo,cevap,degerlendirenTcNo,degerlendirilenTcNo 来自OPENDATASOURCE('SQLOLEDB','数据源= 192.168.150.42;用户ID = readerUser;密码= 1')。akreditasyon.dbo.tblPerfCevap

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

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

SELECT testNo,soruTuruId,soruNo,cevap,degerlendirenTcNo,degerlendirilenTcNo 来自OPENDATASOURCE('SQLOLEDB',@ connectString).akreditasyon.dbo.tblPerfCevap

SELECT testNo,soruTuruId,soruNo,cevap,degerlendirenTcNo,degerlendirilenTcNo 来自OPENDATASOURCE('SQLOLEDB','数据源= 192.168.150.42;用户ID = readerUser;密码='+ @ pw).akreditasyon.dbo.tblPerfCevap

但没有用:S

有没有人有想法?

2 个答案:

答案 0 :(得分:0)

使用exec()函数运行查询。将查询换行为有效的字符串。

答案 1 :(得分: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)