标签: linked-server

无法使用链接服务器连接到SQL Azure

我一直在这里关注这篇文章:

http://blogs.msdn.com/b/sqlcat/archive/2011/03/08/linked-servers-to-sql-azure.aspx

如何将链接服务器从SQL Server 2008 R2设置为SQL Azure实例.我使用SQL Native Client 10.0作为ODBC驱动程序,并通过显示连接有效的默认数据库进行判断; 但是,当我尝试建立链接服务器时,如上文所述; 我收到以下错误:

用于链接服务器"Azure_Test"的OLE DB提供程序"MSDASQL"返回消息"[Microsoft] [ODBC驱动程序管理器]未找到数据源名称且未指定默认驱动程序".

现在我看到一些论坛帖子(不幸的是没有结论)表明它可能是64位问题.有没有人从本地实例成功地将链接服务器设置为SQL Azure?

编辑:戴维斯的答案确实是正确的; 只是以为我会分享这个我发现你现在可以用链接服务器做的很棒的事情:

DELETE OPENQUERY (AzureTest, 
'SELECT * FROM [AzureDB].static.MyTable');

INSERT OPENQUERY (AzureTest, 
'SELECT * FROM [AzureDB].static.MyTable')
SELECT *
FROM static.MyTable

SELECT * FROM OPENQUERY(AzureTest, 'SELECT * FROM [AzureDB].static.MyTable')
Run Code Online (Sandbox Code Playgroud)

sql oledb odbc linked-server azure

6
推荐指数
1
解决办法
4996
查看次数

SQL Azure作为链接服务器 - >获取插入行的标识

我已将Azure云数据库设置为我们的"SQL server 2008 R2"服务器的链接服务器,如此帖所述:http://blogs.msdn.com/b/sqlcat/archive/2011/03/08 /linked-servers-to-sql-azure.aspx 我启用了RPC和RPC Out,因为我在某处读过.

现在问题是我无法获取刚刚插入的记录的ID.请看一下这个测试表:

CREATE TABLE dbo.TEST
(
   ID INT IDENTITY(1, 1) NOT NULL
   CONSTRAINT PK_TEST_ID PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)
Run Code Online (Sandbox Code Playgroud)

我也创建了这个存储过程:

CREATE PROCEDURE test_create @ID INT OUTPUT
AS
  BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON;

      INSERT INTO TEST
      DEFAULT VALUES

      SELECT …
Run Code Online (Sandbox Code Playgroud)

linked-server azure sql-server-2008 azure-sql-database

6
推荐指数
1
解决办法
1663
查看次数

测试链接服务器中是否存在表(服务器名称是参数)

我需要测试一个表是否存在于链接服务器中,其中链接服务器是一个参数(必须是),这就是我使用exec方法的原因.我尝试了很多方法,但没有成功.

Declare @LinkedServerName varchar(50)
Declare @DS varchar(50)
Declare @username varchar(50)
Declare @pswd varchar(12)
Declare @TableExists int

Set @DS = 'test\TestDB'
Set @LinkedServerName = 'LinkedServerAutoAddDrop'
Set @username = 'ua'
Set @pswd = 'pass'
Set @TableExists = 0

if not exists(select * from sys.servers where name = @LinkedServerName)
BEGIN
    EXEC sp_addlinkedserver   
       @server=@LinkedServerName, 
       @srvproduct='',
       @provider='SQLNCLI', 
       @datasrc=@DS

    EXEC sp_addlinkedsrvlogin @LinkedServerName, N'false', NULL, @username, @pswd
    exec sp_serveroption @server=@LinkedServerName, @optname='rpc', @optvalue='TRUE'
    exec sp_serveroption @server=@LinkedServerName, @optname='rpc out', @optvalue='TRUE'
END


exec('IF (EXISTS (SELECT * FROM OPENQUERY([' + @LinkedServerName …
Run Code Online (Sandbox Code Playgroud)

sql linked-server sql-server-2008

6
推荐指数
1
解决办法
5687
查看次数

使用本地表中的数据插入链接服务器上的表

我正在使用 SQL Server Express,我创建了一个到 Oracle 数据库的链接服务器。

正如标题所示,我想将从本地表中选择的数据插入到链接服务器上的表中。

我尝试了很多查询,但没有一个能按我想要的方式工作。

我使用的下面的查询有效,但仅适用于静态值,但我想从本地数据库上的表动态插入数据。

INSERT OPENQUERY (ORTEST, 'SELECT * FROM reservation')
VALUES (2, '2', 3);
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server oracle linked-server openquery

6
推荐指数
2
解决办法
1万
查看次数

5
推荐指数
1
解决办法
8303
查看次数

链接服务器表上的INNER JOIN比子查询慢得多

我遇到了这种奇怪的情况,我想我会把它扔到人群中找出原因.

我有一个查询加入链接服务器上的表:

select a.*, b.phone
from table_a a, 
join remote.table_b b on b.id = a.id
 (lots of data on A, but very few on B)
Run Code Online (Sandbox Code Playgroud)

这个查询是永远在说话(从来没有发现实际的运行时间),那时我注意到B没有索引,所以我添加了它,但这并没有解决问题.最后,出于绝望,我试过:

select a.*, b.phone
from table_a a, 
join (select id, phone from remote.B) as b on b.id = a.id
Run Code Online (Sandbox Code Playgroud)

在我看来,这个版本的查询应该具有相同的结果,但是请注意,它会立即响应!

任何想法为什么会挂起而另一个过程很快?是的,我确实等待确保在运行两者之前已经构建了索引.

sql sql-server msdtc linked-server

5
推荐指数
1
解决办法
9246
查看次数

SQL到Oracle链接服务器Openquery检索单行

我正在使用OpenQuery从Oracle表中获取行集到我的SQL Server中.然后我发现有一些已知的东西OPENROWSET可以获取所有行

但它对我没有用.

SELECT a.*
FROM OPENROWSET('MSDASQL',
   'DRIVER={SQL Server};SERVER=INDIANBANK;UID=ags;PWD=mypass',
   'Select * From ATM_PROGNOSIS.IR_ATMMON_AGS') AS a
Run Code Online (Sandbox Code Playgroud)

错误: -

OLE DB provider "MSDASQL" for linked server "(null)" returned message "[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()).".
OLE DB provider "MSDASQL" for linked server "(null)" returned message "[Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied.".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "MSDASQL" for linked server "(null)". …
Run Code Online (Sandbox Code Playgroud)

sql sql-server oracle linked-server

5
推荐指数
1
解决办法
6269
查看次数

使用动态查询在openquery中转义单引号

我需要使用参数@PickedDate从链接服务器检索数据.如果我跳过@A和@B,查询工作正常,但由于缺少单引号,它总是返回错误.请指教,谢谢.

查询:

Declare @OPENQUERY nvarchar(500), @TSQL nvarchar(max), @LinkedServer nvarchar(20), @A varchar(5), @B varchar(5), @PickedDate varchar(8)
Set @PickedDate = '20150501'
Set @A = 'AAA'
Set @B = 'BBB'
Set @LinkedServer = 'LinkedServerName'
Set @OPENQUERY = 'Select * From Openquery('+ @LinkedServer + ','''
Set @TSQL = 'SELECT cases.casenum, user.username, code
            From cases
            Inner join user
            On cases.casenum = user.user_id
            Where cases.date_opened > DateAdd(day,1-datepart(dw,Convert(date,' + @PickedDate + ')), Convert(date,' + @PickedDate + '))
            And cases.date_opened <= DateAdd(day,8-datepart(dw,Convert(date,' + @PickedDate + ')), Convert(date,' + …
Run Code Online (Sandbox Code Playgroud)

sql-server linked-server dynamic-sql openquery

5
推荐指数
1
解决办法
1万
查看次数

从Sql Server 2008执行oracle存储过程

我试图通过DB LINK从SQL Server 2008 R8执行oracle存储过程,存储过程的标题如下所示:

程序测试(X OUT NOCOPY VARCHAR2,Y OUT NOCOPY NUMBER,Z IN NUMBER)

此过程将更新表"MYTABLE"并返回结果

我的T-SQL是:

           DECLARE @X nvarchar(255)              
           DECLARE @Y INTEGER   
           DECLARE @Z INTEGER


           SET @X= ''
           SET @Y = 0
           SET @Z = 2

           EXEC('begin USER.PKG.TEST(?,?,?); end;',@X OUTPUT, @Y OUTPUT,@Z ) AT DB_ORACLE;
Run Code Online (Sandbox Code Playgroud)

执行存储过程是因为我可以看到表"MYTABLE"已更新,但问题是我得到一个错误:

Msg 7215, Niveau 17, État 1, Ligne 10
Impossible d'exécuter l'instruction sur le serveur distant 'DB_ORACLE'.
Run Code Online (Sandbox Code Playgroud)

转化为

Cannot execute the instruction at the distant server 'DB_ORACLE'
Run Code Online (Sandbox Code Playgroud)

注意:启用Rpc,Rpc Out和Use Remote Collat​​ion的参数

感谢帮助

t-sql sql-server oracle stored-procedures linked-server

5
推荐指数
1
解决办法
1795
查看次数

链接服务器上的SQLSMS Intellisense

我正在尝试使用Intellisense在链接服务器上使用Microsoft SQL Server Management Studio 10.0.5538.0(最新版本),例如:

SELECT Column FROM [LinkedServer].DatabaseName.dbo.Table WITH(NOLOCK)
Run Code Online (Sandbox Code Playgroud)

但是当我编写SQL代码时,我无法找到一种方法来制作智能感知显示结果(它适用于非链接服务器)

我试过的事情:

  • 在SQLSMS文档中查找答案.
  • 在应用程序中查找特定的配置选项.
  • 在编辑 - > IntelliSense - >刷新本地缓存中更新本地缓存.

谢谢你的帮助,

sql-server ssms linked-server sql-server-2008

5
推荐指数
1
解决办法
1706
查看次数