我一直在这里关注这篇文章:
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) 我已将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) 我需要测试一个表是否存在于链接服务器中,其中链接服务器是一个参数(必须是),这就是我使用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 Server Express,我创建了一个到 Oracle 数据库的链接服务器。
正如标题所示,我想将从本地表中选择的数据插入到链接服务器上的表中。
我尝试了很多查询,但没有一个能按我想要的方式工作。
我使用的下面的查询有效,但仅适用于静态值,但我想从本地数据库上的表动态插入数据。
INSERT OPENQUERY (ORTEST, 'SELECT * FROM reservation')
VALUES (2, '2', 3);
Run Code Online (Sandbox Code Playgroud) 我遇到了这种奇怪的情况,我想我会把它扔到人群中找出原因.
我有一个查询加入链接服务器上的表:
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)
在我看来,这个版本的查询应该具有相同的结果,但是请注意,它会立即响应!
任何想法为什么会挂起而另一个过程很快?是的,我确实等待确保在运行两者之前已经构建了索引.
我正在使用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) 我需要使用参数@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) 我试图通过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 Collation的参数
感谢帮助
我正在尝试使用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代码时,我无法找到一种方法来制作智能感知显示结果(它适用于非链接服务器)
我试过的事情:
谢谢你的帮助,
linked-server ×10
sql-server ×6
sql ×4
oracle ×3
azure ×2
openquery ×2
t-sql ×2
dynamic-sql ×1
msdtc ×1
odbc ×1
oledb ×1
ssms ×1