Sql server 2005 SQL SP_EXECSQL@VAR运行一个";“动态”;OpenQuery
我有一个OpenQuery(在SQL2005中用于对遗留数据库运行查询)。我正在构建要运行的字符串,以便返回最后6个月的数据 我遇到的问题是把“| |”改成concat 这适用于遗留系统: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'
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';
“成功了”。甚至连一根弦中的弦都没想过。我知道这是一件愚蠢的简单事情。甚至连一根弦中的弦都没想过。我知道这件事很简单。