【发布时间】:2013-07-23 11:11:34
【问题描述】:
我有以下程序:
CREATE PROCEDURE [dbo].[meals] @EncounterID nvarchar(15), @EventDate nvarchar(30)
AS
DECLARE @TSQL varchar(8000);
SELECT @TSQL = 'SELECT * FROM OPENQUERY(cerner, ''select ce.result_val PercentEaten,
ce.event_cd Meal
from clinical_event ce
where
ce.task_assay_cd in ( 5362408, 5362296, 5361870)
and ce.event_end_dt_tm >= sysdate-30
and ce.event_cd in (636033, 636036, 636039)
and ce.event_class_cd = 233
and ce.encntr_id = ''' +CAST(@EncounterID as varchar(15))+ '''
and ce.event_end_dt_tm between to_char('''+CAST(@EventDate as varchar(30))+''' - .5) and
to_char('''+CAST(@EventDate as varchar(30))+''' - 1)
'')';
EXEC (@TSQL);
GO
当我使用这一行执行时:
exec dbo.meals @EncounterID = '12345678',@EventDate = '07/18/2013'
我收到一个错误,上面写着error at line 9
我做错了什么??
【问题讨论】:
-
你的 openquery 包装器应该没问题(除了缩进它)。问题出在您的包装查询 (
select ce.result_val PercentEaten...) 中,我敢打赌它在引号中...... -
我尝试了两个变量的附加引号,错误移至日期变量
-
你能贴出实际完整的错误信息吗?
-
尝试删除
and ce.event_end_dt_tm between ...子句并运行诊断它。在测试的时候,如果结果太多,也许你应该考虑添加 TOP 1。 -
它可以在没有子句的情况下使用,但日期很重要。是否可以使用多个参数?
标签: sql-server stored-procedures openquery