Хранимая процедура, возвращающая целое число вместо ISingleResult - PullRequest
1 голос
/ 03 июня 2011
ALTER PROCEDURE [dbo].[VCT_SP_SUBJECT_EMAIL_REMINDER]
AS
CREATE TABLE #tempEstimatedDates(
SUBJECT_ID int,
FIRST_NAME varchar(200),
LAST_NAME varchar(200),
MIDDLE_NAME varchar(200),
EMAIL_ID varchar(200),
ACTIVITY_VALUE datetime,
SUB_VISIT_ID int,
VISIT_NO INT,
VISIT_DETAIL_ID INT,
PROTOCOL_ID INT,
LOCATION_ID INT,
SITE_ID INT,
SITE_NAME VARCHAR(200),
PROTOCOL_NAME VARCHAR(200)  
)
INSERT INTO   

#tempEstimatedDates(SUBJECT_ID,FIRST_NAME,LAST_NAME,MIDDLE_NAME,EMAIL_ID,      
ACTIVITY_VALUE,
SUB_VISIT_ID,VISIT_NO,VISIT_DETAIL_ID,PROTOCOL_ID       
 ,LOCATION_ID,PROTOCOL_NAME,SITE_ID,SITE_NAME) 
SELECT * FROM dbo.[GET_SUBJECT_SCHEDULE]('Estimated Date Of Next Visit')

---TABLE FOR ACTUAL DATE OF VISIT---
CREATE TABLE #tempActualDates(
SUBJECT_ID int,
FIRST_NAME varchar(200),
LAST_NAME varchar(200),
MIDDLE_NAME varchar(200),
EMAIL_ID varchar(200),
ACTIVITY_VALUE datetime,
SUB_VISIT_ID int,
VISIT_NO INT,
VISIT_DETAIL_ID INT,
PROTOCOL_ID INT,
LOCATION_ID INT,
SITE_ID INT,
SITE_NAME VARCHAR(200),
PROTOCOL_NAME VARCHAR(200)  
)
INSERT INTO 

 #tempActualDates(SUBJECT_ID,FIRST_NAME,LAST_NAME,MIDDLE_NAME,EMAIL_ID,
 ACTIVITY_VALUE,SUB_VISIT_ID,
VISIT_NO,VISIT_DETAIL_ID,PROTOCOL_ID ,LOCATION_ID,PROTOCOL_NAME,SITE_ID,SITE_NAME) 
SELECT * from dbo.[GET_SUBJECT_SCHEDULE]('Actual Date Of Visit')
select * from #tempEstimatedDates 
where  subject_id in 
(select subject_id from #tempActualDates) and visit_no not in (select visit_NO from   
#tempActualDates)
AND 
(   convert(varchar,ACTIVITY_VALUE,101)=convert(varchar,getdate(),101)
or dateadd(d,2,convert(varchar,getdate()  
,101))=convert(varchar,ACTIVITY_VALUE,101)  
or dateadd(d,1,convert(varchar,getdate() ,101))=convert(varchar,ACTIVITY_VALUE,101)
)
UNION
select * from #tempEstimatedDates
where  subject_id NOT in 
(select subject_id from #tempActualDates)
AND 
(   convert(varchar,ACTIVITY_VALUE,101)=convert(varchar,getdate(),101)
or dateadd(d,2,convert(varchar,getdate()  
,101))=convert(varchar,ACTIVITY_VALUE,101)  
or dateadd(d,1,convert(varchar,getdate() ,101))=convert(varchar,ACTIVITY_VALUE,101)
)
select * from #tempEstimatedDates 
where  subject_id in 
(select subject_id from #tempActualDates) and visit_no not in (select visit_NO from   
#tempActualDates)
AND 
(   --convert(varchar,ACTIVITY_VALUE,101)=convert(varchar,getdate(),101) or 
DATEDIFF(d,convert(varchar,ACTIVITY_VALUE,101),convert(varchar,getdate()  
,101))=2    
or DATEDIFF(d,convert(varchar,ACTIVITY_VALUE,101),convert(varchar,getdate()  
,101))=1    
)
UNION
select * from #tempEstimatedDates
where  subject_id NOT in 
(select subject_id from #tempActualDates)
AND 
(   --convert(varchar,ACTIVITY_VALUE,101)=convert(varchar,getdate(),101) OR
DATEDIFF(d,convert(varchar,ACTIVITY_VALUE,101),convert(varchar,getdate()  
 ,101))=2   
or DATEDIFF(d,convert(varchar,ACTIVITY_VALUE,101),convert(varchar,getdate() 
,101))=1    
)
drop table #tempEstimatedDates
drop table #tempActualDates

Это моя хранимая процедура, которая возвращает две таблицы данных на сервере sql. Но когда я перетаскиваю этот SP в dbml, его возвращаемый тип становится int вместо Isingleresult. как решить эту проблему.

Ответы [ 3 ]

1 голос
/ 05 августа 2013

У меня тоже была эта проблема, которая определенно была вызвана временными таблицами.Я исправил это, добавив

SET FMTONLY OFF;

к началу хранимой процедуры.Решение взято из этого блога , в котором говорится о Entity Framework, но то же самое относится и к Linq для Sql.

0 голосов
/ 19 сентября 2011

Объявите ваши временные таблицы таким образом DECLARE @TempTable TABLE вместо CREATE TABLE #tempActualDates, и вам будет хорошо.

0 голосов
/ 03 июня 2011

У меня была похожая проблема в прошлом. Я думаю, что это связано с наличием временных таблиц в SP. Я не могу точно вспомнить, как мне это удалось, но я думаю, что это было связано с использованием пользовательской функции вместо хранимого процесса.

Нет ли способа добиться этого, используя Linq-to-Sql вместо SP?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...