SQL-запрос не получает значения - PullRequest
0 голосов
/ 16 мая 2011

Я пытаюсь получить значения с помощью SP. Запрос приведен ниже.

 create proc [dbo].[GetOrdersByUserID11]    
(    
@UserID int    
)    
as    
begin    
declare @status varchar(1000)

set @status=' select a.*, b.CategoryText, Cast('''' as Varchar(10)) as SectionsViewed, PurchasedDate as dateadded into #myCourses1 from dbo.Tbl_CourseInformations  a JOIN Tbl_Categories b ON a.AssignCategory = b.CategoryID '   
set @status=@status+' Join Tbl_Orders c ON c.UserID = '+convert(varchar(10),@UserID)+''

 set @status=@status+'Order By CategoryText, CourseTitle '   

print @status

exec(@status)

 select * from #myCourses1

end

This is message from my query when run my SP[[dbo].[GetOrdersByUserID11] 5085  ]:


 select a.*, b.CategoryText, Cast('' as Varchar(10)) as SectionsViewed, PurchasedDate as dateadded into #myCourses1 from dbo.Tbl_CourseInformations  a JOIN Tbl_Categories b ON a.AssignCategory = b.CategoryID  Join Tbl_Orders c ON c.UserID = 5085

(99 row(s) affected)

Я получаю сообщение на 99 строк, но в моих результатах я получаю только заголовок с 0 (ноль) столбцами.

Плз, помогите мне получить значения.

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 16 мая 2011

Временная таблица, которую вы создаете, находится только в пределах оператора EXEC, а не во внешнем запросе.

exec('select 1 as f into #t') 
select * from #t'  <-- out of scope

Выберите в операторе:

exec('select 1 as f into #t; select * from #t') 

Или создайте временную таблицусначала (поэтому создание / выбор находятся в одной области действия).

select 1 as f into #t where 0=1 --force empty
exec('insert #t values (2)') 
select * from #t
0 голосов
/ 16 мая 2011

Почему вы строите запрос на выборку в процедуре магазина? Как я понимаю ваш запрос, вы хотите только результат. В этом случае лучше использовать представление с параметрами в вызове.

CREATE VIEW [dbo].[GetOrdersByUserID11]
AS
SELECT a.*, b.CategoryText, Cast('' as Varchar(10)) as SectionsViewed, PurchasedDate as dateadded into #myCourses1 from dbo.Tbl_CourseInformations a JOIN Tbl_Categories b ON a.AssignCategory = b.CategoryID 

GO

И вы называете это так:

SELECT * FROM GetOrdersByUserID11 Join Tbl_Orders c WHERE c.UserID = 5085
0 голосов
/ 16 мая 2011

Ваш последний оператор выбирает данные во временную таблицу вместо набора результатов, который возвращается. Если в конце вашей процедуры вы добавите следующее, вы должны получить свои данные:

select * from #myCourses1
0 голосов
/ 16 мая 2011

Я действительно не понимаю, почему вы сначала помещаете свой запрос в строковую переменную.Делает ли запрос ниже то, что вам нужно?

create proc [dbo].[GetOrdersByUserID11]    
(    
    @UserID int    
)    
AS    
BEGIN

SELECT a.*, b.CategoryText, Cast("" as Varchar(10)) as SectionsViewed, 
    PurchasedDate as dateadded
FROM dbo.Tbl_CourseInformations a 
    JOIN Tbl_Categories b ON a.AssignCategory = b.CategoryID
    JOIN Tbl_Orders c ON c.UserID = convert(varchar(10),@UserID)
ORDER By CategoryText, CourseTitle

END

Вызов хранимой процедуры:

EXEC GetOrdersByUserID11(1234);

...