Sql server 2005 SQL SP_EXECSQL@VAR运行一个";“动态”;OpenQuery

Sql server 2005 SQL SP_EXECSQL@VAR运行一个";“动态”;OpenQuery,sql-server-2005,openquery,sp-executesql,Sql Server 2005,Openquery,Sp Executesql,我有一个OpenQuery(在SQL2005中用于对遗留数据库运行查询)。我正在构建要运行的字符串,以便返回最后6个月的数据 我遇到的问题是把“| |”改成concat 这适用于遗留系统: SELECT EVENT_DATE || ' ' || EVENT_TIME as EVENTDateTime FROM EVENT 这通过链接的SQL Server在SQL2005中起作用: Declare @Query nvarchar(MAX) Set @Query = N'

我有一个OpenQuery(在SQL2005中用于对遗留数据库运行查询)。我正在构建要运行的字符串,以便返回最后6个月的数据

我遇到的问题是把“| |”改成concat

这适用于遗留系统:

SELECT
    EVENT_DATE || ' ' || EVENT_TIME as EVENTDateTime
FROM
     EVENT
这通过链接的SQL Server在SQL2005中起作用:

Declare @Query nvarchar(MAX)
Set @Query = N'
    SELECT
        *
    FROM
        OPENQUERY(PATCOMLIVE,
             ''SELECT
                *
            FROM
                 root.ESDB_EVENT as EV
            ''
            ) as OpenQ';

exec sp_executesql @Query
这不起作用:

Declare @Query nvarchar(MAX)
Set @Query = N'
    SELECT
        *
    FROM
        OPENQUERY(PATCOMLIVE,
             ''SELECT
                EVENT_DATE || '' '' || EVENT_TIME
            FROM
                 root.ESDB_EVENT as EV
            ''
            ) as OpenQ';

exec sp_executesql @Query
这也不是:

                EVENT_DATE '|'| '' '' '|'| EVENT_TIME

我知道我错过了一些简单的事情。。。但是,将字符串连接在一起的| |将把事情搞砸了,尽管它本身可以在遗留系统上工作。

您是对的,它不工作,因为它没有将完整的字符串发送到
OPENQUERY
,您可以尝试两种方法。首先,连接右侧的
,应该是这样的:

Set @Query = N'
    SELECT
        *
    FROM
        OPENQUERY(PATCOMLIVE,
             ''SELECT
                EVENT_DATE || '''' '''' || EVENT_TIME
            FROM
                 root.ESDB_EVENT as EV
            ''
            ) as OpenQ';
Set @Query = N'
    SELECT
        *, EVENT_DATE + '' '' + EVENT_TIME
    FROM
        OPENQUERY(PATCOMLIVE,
             ''SELECT
                *
            FROM
                 root.ESDB_EVENT as EV
            ''
            ) as OpenQ';
或者可以尝试在SQL中连接这些列,如下所示:

Set @Query = N'
    SELECT
        *
    FROM
        OPENQUERY(PATCOMLIVE,
             ''SELECT
                EVENT_DATE || '''' '''' || EVENT_TIME
            FROM
                 root.ESDB_EVENT as EV
            ''
            ) as OpenQ';
Set @Query = N'
    SELECT
        *, EVENT_DATE + '' '' + EVENT_TIME
    FROM
        OPENQUERY(PATCOMLIVE,
             ''SELECT
                *
            FROM
                 root.ESDB_EVENT as EV
            ''
            ) as OpenQ';

您是对的,它不工作,因为它没有向
OPENQUERY
发送完整的字符串,您可以尝试两种方法。首先,连接右侧的
,应该是这样的:

Set @Query = N'
    SELECT
        *
    FROM
        OPENQUERY(PATCOMLIVE,
             ''SELECT
                EVENT_DATE || '''' '''' || EVENT_TIME
            FROM
                 root.ESDB_EVENT as EV
            ''
            ) as OpenQ';
Set @Query = N'
    SELECT
        *, EVENT_DATE + '' '' + EVENT_TIME
    FROM
        OPENQUERY(PATCOMLIVE,
             ''SELECT
                *
            FROM
                 root.ESDB_EVENT as EV
            ''
            ) as OpenQ';
或者可以尝试在SQL中连接这些列,如下所示:

Set @Query = N'
    SELECT
        *
    FROM
        OPENQUERY(PATCOMLIVE,
             ''SELECT
                EVENT_DATE || '''' '''' || EVENT_TIME
            FROM
                 root.ESDB_EVENT as EV
            ''
            ) as OpenQ';
Set @Query = N'
    SELECT
        *, EVENT_DATE + '' '' + EVENT_TIME
    FROM
        OPENQUERY(PATCOMLIVE,
             ''SELECT
                *
            FROM
                 root.ESDB_EVENT as EV
            ''
            ) as OpenQ';
“成功了”。甚至连一根弦中的弦都没想过。我知道这是一件愚蠢的简单事情。甚至连一根弦中的弦都没想过。我知道这件事很简单。