如何在 SQL Server 2008 中找到定义的链接服务器的地址?链接服务器存在,其连接测试显示没有问题。但我找不到链接服务器连接到的位置。该属性框并没有导致问题的答案。
谢谢你。
我们有一个MS SQL Server 2005安装,它通过链接服务器连接连接到Oracle数据库。
许多 SELECT 语句是通过一系列OPENQUERY()命令执行的。大多数这些语句中的 WHERE 子句都是针对VARCHAR列的。
我听说如果 WHERE 子句区分大小写,它会对性能产生很大影响。
所以我的问题是,如何确保以不区分大小写的方式执行非二进制字符串 WHERE 子句以获得最大性能?
我在两个不同的sql服务器(一个是SqlServer 2000,另一个是2008)中有相同的表。
我正在使用 sql server Management Studio。
我希望每次在 SqlServer 2000 表(Table_1)中的表上进行插入时,都会发生触发器,并且记录也会被插入到 SqlServer 2008 表(也是 Table_1)中的同一个表中。
sql server 2008 被定义为链接服务器,可以使用 sql server management studio 从 2000 db 连接运行查询并在 2008 db 上执行插入。
触发器定义如下:
ALTER TRIGGER [dbo].[trgrTable]
ON [dbo].[Table_1]
AFTER INSERT
AS
BEGIN
INSERT INTO [TLVSQL].[AVI_DEV].[dbo].[Table_1](ID, Value)
SELECT INSERTED.ID AS ID, INSERTED.Value AS Value
FROM INSERTED
END
Run Code Online (Sandbox Code Playgroud)
这[TLVSQL].[AVI_DEV]是 2008 年的数据库名称。
但是每次我在 2000 表上执行插入时,我都会收到一条消息,指出插入由于“sqloledb 无法启动分布式事务链接服务器...”而无法提交。
链接服务器的安全委托已明确定义,我将安全凭证显式设置为 db_owner 的用户/密码。
我究竟做错了什么 ?还有另一种方法可以完成我的要求吗?
谢谢。
我使用以下列顺序创建了一个viewson sql server:
当我选择视图时,下面是列的顺序 vwTable
Shift_id | Client_ip | Machine_Center
Run Code Online (Sandbox Code Playgroud)
但是当我要从excel中选择views使用时get external data:
SELECT * FROM vwTable
Run Code Online (Sandbox Code Playgroud)
列的顺序EXCEL不相同,输出为:
Machine_Center | Client_ip | Shift_id
Run Code Online (Sandbox Code Playgroud)
截图:
来自SSMS:
Select * from vwTable
Run Code Online (Sandbox Code Playgroud)

来自excel:获取外部数据
Select * from vwTable
Run Code Online (Sandbox Code Playgroud)

我的问题是列顺序必须相同 views
我有两个数据库MSSQL和MYSQL
我想将数据从 MYSQL 传输到 MSSQL,结果我在它们之间创建了链接服务器
在这一步之前我没有任何问题
我写了下面的代码从 MYSQL 获取数据并插入到 MSSQL
INSERT into dbo.test2016
SELECT * FROM openquery(test1, 'SELECT t_id,t_date
FROM test1.test2016') T1
INNER JOIN dbo.test2016 T2 ON T1.t_date > T2.t_date
Run Code Online (Sandbox Code Playgroud)
但我在MSSQL中遇到Msg 213, Level 16, State 1, Line 1 因为INNER JOIN无法与INSERT INTO匹配
我需要在插入 MSSQL 之前比较两个表之间的 t_date 列
我能怎么做?
我正在创建视图,但在此之前我正在测试和使用多个链接服务器在 select union 语句中返回列值,我使用以下简单代码:
SELECT * FROM OPENQUERY ([linkedserver1],'SELECT TOP 1 [Column1], [Column2] FROM [db].[table]')
UNION ALL
SELECT * FROM OPENQUERY ([linkedserver2],'SELECT TOP 1 [Column1], [Column2] FROM [db].[table]')
UNION ALL
SELECT * FROM OPENQUERY ([linkedserver3],'SELECT TOP 1 [Column1], [Column2] FROM [db].[table]')
Run Code Online (Sandbox Code Playgroud)
它按预期返回以下结果:
|Column1|Column2|
| 001 | Pass |
| 010 | Pass |
| 100 | Pass |
Run Code Online (Sandbox Code Playgroud)
但我的问题在于,当其中一个链接服务器离线时(例如 [ linkedserver2 ]),没有显示任何结果,我只得到:
OLE DB provider "SQLNCLI11" for linked server "[linkedserver2]" returned
message "Login timeout expired".
OLE DB provider "SQLNCLI11" for …Run Code Online (Sandbox Code Playgroud) 我想通过链接服务器(openquery)执行以下语句:
UPDATE SAP_PLANT
SET (OWNER, OWNER_COUNTRY) = (SELECT import.AFNAME, import.COUNTRY
FROM SAP_IMPORT_CUSTOMERS import, SAP_PLANT plant
WHERE plant.SAP_FL = import.SAP_NO
AND import.role ='OWNER')
Run Code Online (Sandbox Code Playgroud)
我试图将其形成以下语法,但没有成功:(
update openquery(‘my_linked_server, ‘select column_1, column_2 from table_schema.table_name where pk = pk_value’)
set column_1 = ‘my_value1?, column_2 = ‘my_value2?
Run Code Online (Sandbox Code Playgroud)
我希望这对你来说没有问题?
当我尝试执行涉及 Oracle 链接服务器的查询时,我遇到了这个问题。找到下面的查询,
SELECT DISTINCT Convert(nvarchar(100),A.ZIP_CD)
,Convert(nvarchar(100),A.CITY)
,Convert(nvarchar(100),A.ST_CD)
,Convert(nvarchar(100),E.PCT)
,Convert(nvarchar(100),B.DEFAULT_DEL_CHG)
,Convert(nvarchar(100),E.DEL_TAX)
FROM [LIVE]..[CUSTOM].MASTER_ZIP A,
[LIVE]..[MISC].ZONE B,
[LIVE]..[MISC].ZIP2ZONE C,
[LIVE]..[MISC].ZIP2TAX D,
[LIVE]..[SALES].TAT E
WHERE A.ZIP_CD = C.ZIP_CD
AND ISNULL(B.DEFAULT_DEL_CHG,0) <> 0
AND A.USPS_PRIM = 'P'
AND C.ZONE_CD = B.ZONE_CD
AND A.ZIP_CD = D.ZIP_CD
--AND decode(D.TAX_CD,'999','99',d.tax_cd) = E.TAT_CD
AND (Case When D.TAX_CD = '999' Then '99' Else D.TAX_CD End) = E.TAT_CD
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误,
无法从链接服务器“LIVE”的 OLE DB 提供程序“OraOLEDB.Oracle”获取行数据。
我在一个论坛上发现,由于 Oracle 在 sql server 中转换数字时出现问题,请尝试转换为 nvarchar,但我仍然遇到相同的错误。
关于如何解决这个问题有什么想法吗?谢谢。
如何设置链接服务器MVC3 Web.Config?
我们有一个链接服务器,它有一个SP_PROC我们需要运行的存储过程.但是,主SQL服务器TESTSERVER1和链接服务器都是在测试环境中设置的TESTSERVER2,因此名称/ ip将在应用程序上线后更改.因此,我不想SP在代码中指定任何名称以外的内容.
我已经尝试在连接字符串的初始目录字段中指定链接服务器,但是这会抛出错误 - 所以我假设我正在咆哮错误的树.
连接字符串示例:
<add name="connectionName" connectionString="data source=TESTSERVER1;Initial Catalog=TESTSERVER2;user id.../>
Run Code Online (Sandbox Code Playgroud) 我正在运行Microsoft SQL Server 2012并尝试在openqueryMySQL数据库中运行删除命令:
delete openquery(MyLinkedServer, 'select * from table_to_delete_from');
Run Code Online (Sandbox Code Playgroud)
然而,这是完全的,痛苦地缓慢到不可行的程度.涉及的数据集太大,并且执行上述操作要求必须通过VPN将所有要删除的MySQL数据提取到MSSQL服务器.
直接从MySQL服务器运行此命令时,观察速度超过5倍,这是可行的.
如何delete在不必复制数据集的情况下从MSSQL 调用命令到MySQL链接服务器?也许在MySQL端运行各种存储过程?这有用openquery吗?
我在 SQL Server 2008 R2 表中有几行
ConfirmTable (ItemID, Barcode)
Run Code Online (Sandbox Code Playgroud)
以及 DB2 头文件中的更多行
O1 (ItemId, barcode, ProductionUnit, OwnerName, Delivered, Qty)
Run Code Online (Sandbox Code Playgroud)
和详细文件
O2 (ItemId, barcode, Address, ItemName, Delivered, TotalLines)
Run Code Online (Sandbox Code Playgroud)
如果ItemID和Barcode存在于ConfirmTable. 我正在尝试使用以下查询,但似乎显示以下错误。
链接服务器“LINK_DB”的 OLE DB 提供程序“DB2OLEDB”返回消息“更新或刷新的键列信息不足。”
代码:
UPDATE OQ
SET OQ.Delivered='YES'
FROM OPENQUERY(LINK_DB, 'SELECT *
FROM XXXXR.HLIB.O1 O1O
LEFT JOIN XXXXR.HLIB.O2 O2O ON O1O.ItemID = O2O.ItemID
WHERE O1O.Qty > 0') OQ
INNER JOIN
ConfirmTable CT ON CT.Barcode = OQ.Barcode
Run Code Online (Sandbox Code Playgroud)
我也尝试了以下更新格式,但它对我不起作用。
http://www.experts-exchange.com/questions/28390846/OPENQUERY-in-sql-server-linked-server.html
我正在尝试使用此查询来删除链接服务器的数据库中已有的行:
GO
USE TAMSTest
GO
DELETE from [dbo].[Hour]
WHERE [dbo].[Hour].[InHour] = (SELECT [InHour]
FROM [TDG-MBL-005].[TAMSTEST].[dbo].[Hour])
GO
Run Code Online (Sandbox Code Playgroud)
当链接服务器表中只有一行时,SELECT [InHour] FROM [TDG-MBL-005].[TAMSTEST].[dbo].[Hour]返回该行,DELETE按预期工作.但是,对于链接服务器表中的多行,它不起作用,因为查询的该部分返回多行作为其结果.我该如何解决这个问题?
如果需要进一步的信息请询问,我需要尽快完成.
在此先感谢,伊顿B.
linked-server ×12
sql-server ×8
openquery ×4
sql ×4
mysql ×2
oracle ×2
sql-update ×2
c# ×1
database ×1
db2 ×1
join ×1
oledb ×1
triggers ×1