我有SQL Server 2019,并已将名为[PSMDB_WIN_SVR]的SQLite数据库链接到它。
我的目标是从链接数据库中检索所有大于或等于代表朱利安日期/时间的双变量参数的记录的数据。该查询在本机SQLite环境中运行良好:
SELECT julianDateUTC,
frequency,
Vrms,
I1rms,
I2rms,
I3rms,
P1,
P2,
P3,
ProcessorTemp,
Quality
FROM tblRealTimeData
WHERE julianDateUTC >= :JD
ORDER BY julianDateUTC;
我已经在SQL Server中创建了以下动态存储过程:
USE [pMonNetworkServer]
GO
/****** Object: StoredProcedure [dbo].[getNewDataProc] Script Date: 24/05/2020 09:27:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE getNewDataProc
@jd VARCHAR(50)
AS
DECLARE @sql VARCHAR(MAX)
SET @sql = 'SELECT * FROM OPENQUERY(PSMDB_WIN_SVR, ' +
'' + 'SELECT julianDateUTC,
frequency,
Vrms,
I1rms,
I2rms,
I3rms,
P1,
P2,
P3,
ProcessorTemp,
Quality
FROM tblRealTimeData
WHERE julianDateUTC >= ' + '' + @jd + '' +
' ORDER BY julianDateUTC;' + '' + ')'
EXEC (@sql)
GO
当我使用SSMS执行此操作时,我得到以下信息:
Msg 156,第15级,状态1,第3行关键字“ SELECT”附近的语法不正确。Msg 102,第15级,状态1,第15行')'附近的语法不正确。
(影响1行)
完成时间:2020-05-24T10:30:54.8070814 + 10:00
显然我的语法不正确。 OPENQUERY sql字符串必须在引号中设置为文字,我为此使用了''。
我也将@jd
参数括在单引号中。我也尝试过没有此操作,但是无论如何我都会收到错误消息。
有人可以帮忙吗?
[使用+''+插入'分隔符无效。
解决方案是关闭分隔符并使用+“'” +
我有点怀疑,但是因为Microsoft从SSLS 2019 duhhh中删除了调试功能!我安装了17并确认了问题。
正确的代码是
USE [pMonNetworkServer]
GO
/****** Object: StoredProcedure [dbo].[getNewDataProc] Script Date: 24/05/2020 13:13:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[getNewDataProc2]
@jd VARCHAR(50)
AS
BEGIN
DECLARE @sql VARCHAR(MAX)
SET @sql = 'SELECT * FROM OPENQUERY(PSMDB_WIN_SVR, ' +
"'" + 'SELECT julianDateUTC,
frequency,
Vrms,
I1rms,
I2rms,
I3rms,
P1,
P2,
P3,
ProcessorTemp,
Quality ' +
' FROM tblRealTimeData ' +
' WHERE julianDateUTC >= ' + @jd +
' ORDER BY julianDateUTC;' + "'" + ')'
END
EXEC (@sql)
Best regards
Rob