标签: openquery

如何在TSQL中测试linkedserver的连接性

我需要编写一个过程来从几个远程服务器收集数据,

我使用链接服务器和OPENQUERY从服务器收集数据,但有时我失去了与某些服务器的连接,或者我根本无法连接它们(例如远程服务器处于脱机状态) - 并且在这些情况下OPENQUERY会导致超时.

所以我想首先检查链接服务器连接,然后如果它成功运行查询,如果不是只是移动到下一个远程服务器.

我试图将OPENQUERY置于TRY - CATCH但它仍然返回我超时错误,sp_testlinkedserver程序也返回了我超时错误.

我真的很感激任何帮助.

sql t-sql connection linked-server openquery

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

SQL Server:OPENQUERY 用简单的话(举例)

我是 SQL Server 的新手,我在这里偶然发现了这一点:

BEGIN TRANSACTION loadTTAllocations

    INSERT INTO @ttaAllocs
        SELECT 
            company_code AS CompanyId,
            job_number AS JobNo,
            ...
            is_blocked AS IsBlocked
        FROM 
            OPENQUERY([SRV_TimeTac], 
                       'SELECT DISTINCT 
                            job.individual_value_1 AS job_number,
                            job.individual_value_3 AS company_code,
                            ...
                            now() AS queryTimeStamp
                        FROM 
                            pm_altran.pm_tasks_subprojects AS taskCode
                        INNER JOIN 
                            pm_altran.pm_tasks_subprojects AS job
                                 ON job.id = taskCode.mother_id 
                                 AND job.is_done = 0
                                 AND NOT job.is_blocked
                        INNER JOIN 
                            pm_node_to_user AS n2u
                                 ON n2u.node_id = taskCode.id
                                 AND n2u.access = 1
                                 AND n2u.is_todo = 1
                        LEFT JOIN 
                            altran_pm_user_user_settings AS u
                                 ON u.administrators_id = …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server openquery

4
推荐指数
1
解决办法
2792
查看次数

如何在动态 SQL 中处理从 OpenQuery 调用到链接分析服务器的空结果集?

我有许多与此结构类似的存储过程:

DECLARE @sql NVARCHAR(MAX)
DECLARE @mdx NVARCHAR(MAX)

CREATE table #result
(
  [col1] NVARCHAR(50),
  [col2] INT,
  [col3] INT
)

SET @mdx = '{some dynamic MDX}'
SET @sql = 'SELECT a.* FROM OpenQuery(LinkedAnalysisServer, ''' + @mdx + ''') AS a'

INSERT INTO #result
EXEC sp_executesql @sql
SELECT * FROM #result
Run Code Online (Sandbox Code Playgroud)

当多维数据集中存在结果时,这非常有效。但是,当 OpenQuery 结果为空时,INSERT 会失败并显示以下错误:

列名或提供的值数量与表定义不匹配。

我的问题是,处理这种情况的最佳方法是什么?我在静态报告文件 (.rdlc) 中使用结果,因此(我很确定)需要显式键入临时表。

t-sql ssas stored-procedures dynamic-sql openquery

3
推荐指数
1
解决办法
4570
查看次数

使用带有MySQL链接服务器的openquery,宽varchar字段导致"不支持请求转换"错误

我正在尝试将表从MySql迁移到MSSQL,openquery但我不断收到以下错误消息:

OLE DB provider "MSDASQL" for linked server "MYSQL" returned message "Requested conversion is not supported.".
Msg 7341, Level 16, State 2, Line 1
Cannot get the current row value of column "[MSDASQL].description" from OLE DB provider "MSDASQL" for linked server "MYSQL". 
Run Code Online (Sandbox Code Playgroud)

我正在尝试运行的SQL查询:

insert into dbo.tickets (id, description, createdAt)
select * from openquery(MYSQL, 'select * from mydb.tickets')
Run Code Online (Sandbox Code Playgroud)

随着openquery我已经复制了几个表,但这个招数我.

在数据库的两边,description字段是varchar(8000).在MySql中没有描述为null的行,最长的描述只有5031个字符.

我尝试使用相同的数据结构在MySql中创建一个新视图,但是得到了相同的错误.我无法确定哪一行具有无效的描述字段,因为该表包含超过65000行.

我也尝试将数据转储到SQL文件中,但我进入OutOfMemoryException了Management Studio.转储的sql文件本身大约是60 MB.

有关迁移此数据的任何建议或其他方式吗?

提前致谢!

mysql sql sql-server odbc openquery

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

使用 OPENQUERY 更新链接服务器上的表

我有两台服务器:SQLSERVER01并且SQLSERVER02我正在尝试更新来自SERVER01SERVER02SERVER01链接服务器)的数据。

我的更新查询当前是动态的,看起来像这样

DECLARE @SQL NVARCHAR(MAX)
DECLARE @ID INT

SET @ID = 1

Set @SQL = 'Update SERVER01.MyDatbase.dbo.MyTable
            set ModifiedDate = GetDate(), SomeOtherValue = ''xyz''
            Where Id = ' Convert(varchar(10), @ID)
Run Code Online (Sandbox Code Playgroud)

如果我现在打电话

EXEC(@SQL) 
Run Code Online (Sandbox Code Playgroud)

它有时会起作用,但有时它会挂在那里很长时间,当我跑步时sp_active我会看到PREEMPTIVE_OLEDBOPS

所以,我然后尝试使用开放查询,如下所示

Select * 
From OpenQuery(SERVER01,
               'Update SERVER01.MyDatbase.dbo.MyTable
                set ModifiedDate = GetDate(), SomeOtherValue = ''xyz''
                Where Id = 1')
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:

链接服务器“SERVER01”的 OLE DB 提供程序“SQLNCLI11”指示该对象没有列,或者当前用户对该对象没有权限。

当我运行以下选择查询时,我成功返回了我尝试更新的行:

Select * 
From OpenQuery(SERVER01,
               'Select *
                From SERVER01.MyDatbase.dbo.MyTable
                Where …
Run Code Online (Sandbox Code Playgroud)

sql-server openquery sql-update

3
推荐指数
1
解决办法
4195
查看次数

如何使 WHERE 子句不区分大小写:从 SQL Server 查询 Oracle 链接服务器

我们有一个MS SQL Server 2005安装,它通过链接服务器连接连接到Oracle数据库。

许多 SELECT 语句是通过一系列OPENQUERY()命令执行的。大多数这些语句中的 WHERE 子句都是针对VARCHAR列的。

我听说如果 WHERE 子句区分大小写,它会对性能产生很大影响。

所以我的问题是,如何确保以不区分大小写的方式执行非二进制字符串 WHERE 子句以获得最大性能?

sql-server oracle linked-server case-insensitive openquery

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

从MS SQL服务器更新MySql

我需要帮助编写将从SQL服务器更新MySql表的查询.我创建了链接服务器和选择查询工作正常但我在更新时遇到错误.我真的很想写这种类型的查询,所以请帮助我理解错误信息及其含义.

我的更新查询:

UPDATE openquery(stagedb_za, 'Select acm_flag FROM aol_center WHERE nid = 6439')
Set acm_flag = 'P' 
Run Code Online (Sandbox Code Playgroud)

错误:

用于链接服务器"stagedb_za"的OLE DB提供程序"MSDASQL"返回消息"无法找到行以进行更新.某些值自上次读取后可能已更改.".消息7343,级别16,状态4,行1链接服务器的OLE DB提供程序"MSDASQL"无法更新表"[MSDASQL]".行集使用了乐观并发,并且在上次提取或重新同步包含行之后,列的值已更改.

mysql linked-server openquery sql-server-2008

2
推荐指数
2
解决办法
5512
查看次数

如何在 SQL Server 中使用 OPENQUERY 设置变量

我正在尝试从表中读取数据。这个表有一个表名列表。

对于数据集的每一行,我想运行几个查询来提取数据并将其插入到临时表中。

这是我所做的

DECLARE @campName varchar(255);
DECLARE @sqlCommand varchar(1000);
DECLARE @sqlCommandMySQL varchar(1000);
DECLARE @LastRun varchar(60);
DECLARE @OPENQUERY varchar(1000);


DECLARE MY_CURSOR CURSOR 
  LOCAL STATIC READ_ONLY FORWARD_ONLY
FOR 
SELECT LTRIM(RTRIM(CallListName)) AS CallListName
FROM [SMSQL1].[RDI_System].[dbo].[Campaigns]
WHERE dialer_campaign = 1 AND i3Server ='I3New' AND ClientID = 111 AND (EndDate IS NULL OR EndDate >= getdate() - 7)

OPEN MY_CURSOR
FETCH NEXT FROM MY_CURSOR INTO @campName
WHILE @@FETCH_STATUS = 0
BEGIN 
    --SET @LinkedServer = 'GUARDIAN';
    SET @OPENQUERY = 'SELECT @LastRun = lr FROM OPENQUERY(GUARDIAN,''';
    SET …
Run Code Online (Sandbox Code Playgroud)

sql sql-server scalar openquery

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

将 OPENQUERY 与 Oracle 数据库结合使用来查询日期范围

我们有一个 Oracle 数据库,可以通过 OpenQuery 访问该数据库以获取某些内容。显然,您无法使用 OleDB 驱动程序直接在 OpenQuery 中进行日期比较,因此要解决此问题,您必须将日期转换为 Julien 日期并比较这些数字。我有以下查询,我们尝试在 MS SQL Server 中执行此查询(GPROD 是通过 OleDb 驱动程序的链接服务器):

SELECT *
FROM  OPENQUERY(GPROD, '
     SELECT * 
     FROM ORD_HDR_HST 
     WHERE (cast(to_number(to_char(SHIP_DATE ,''J'')) as numeric(10,0))  >= cast(to_number(to_char(to_date(''01-JAN-2015'') ,''J'')) as numeric(10,0))  AND 
            cast(to_number(to_char(SHIP_DATE ,''J'')) as numeric(10,0))  <= cast(to_number(to_char(to_date(''21-SEP-2015'') ,''J'')) as numeric(10,0)) )')
Run Code Online (Sandbox Code Playgroud)

此查询不返回结果,但也不会产生错误。

如果我在 Oracle SQL Developer 中执行此查询,它会正常工作并返回数千行:

SELECT * 
FROM ORD_HDR_HST 
WHERE (cast(to_number(to_char(SHIP_DATE ,'J')) as numeric(10,0))  >= cast(to_number(to_char(to_date('01-JAN-2015') ,'J')) as numeric(10,0))  AND 
       cast(to_number(to_char(SHIP_DATE ,'J')) as numeric(10,0))  <= cast(to_number(to_char(to_date('21-SEP-2015') ,'J')) as numeric(10,0)) )
Run Code Online (Sandbox Code Playgroud)

该 …

sql-server oracle date openquery

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

如果 SELECT 中的一个或多个链接服务器脱机,则链接服务器 SELECT UNION 结果

我正在创建视图,但在此之前我正在测试和使用多个链接服务器在 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)

sql-server linked-server openquery

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