2016-04-27 1 views
1

Я получаю «Идентификатор с несколькими частями« Membership.Mem_Num »не может быть связан. ошибка всякий раз, когда я пытался выполнить этот код:ошибка в простой хранимой процедуре в SQL Management Studio

Alter Proc Procedure1 
(
@MemNum int 
) 
AS 
BEGIN 
if (@MemNum != Membership.Mem_Num) 
    Begin 
     Print 'This Member Number does not exist.' 
    End 
    Else 
    Select @MemNum AS 'MemNum', Movie.Movie_Num, Movie_Title, Movie_Year, Movie_Cost, Movie_Genre ,Price_Code 
    From Movie, Membership, Video, DetailRental, Rental 
    Where @MemNum = Membership.Mem_Num AND 
    Movie.Movie_Num = Video.Movie_Num AND 
    Video.Vid_Num = DetailRental.Vid_Num AND 
    DetailRental.Rent_Num = Rental.Rent_Num AND 
    Rental.Mem_Num = Membership.Mem_Num END 

мне нужно, если заявление, чтобы проверить, является ли число членом существует в таблице. Если это не так, тогда код должен печатать «номер члена не существует». Однако проблема, которую я получаю, заключается в инструкции if (@memnum! = Membership.mem_num).

ответ

0

Вы пытаетесь ссылаться на членство.memnum в части запроса, которая не запрашивает ни одну таблицу, - она ​​не может извлечь эти данные. Если цель заявления, если проверить, существует ли @MemNum передается в хранимую процедуру в таблице членства, попробуйте эту логику (можно в качестве альтернативы использовать существует() вместо подсчета логики):

ALTER PROC Procedure1 (@MemNum INT) 
AS 
    BEGIN 
     IF (SELECT COUNT(*) FROM membership WHERE mem_num = @MemNum) = 0 
     BEGIN 
      PRINT 'This Member Number does not exist.' 
     END 
     ELSE 
     SELECT @MemNum AS 'MemNum', 
       movie.movie_num, 
       movie_title, 
       movie_year, 
       movie_cost, 
       movie_genre, 
       price_code 
     FROM movie, 
       membership, 
       video, 
       detailrental, 
       rental 
     WHERE @MemNum = membership.mem_num 
       AND movie.movie_num = video.movie_num 
       AND video.vid_num = detailrental.vid_num 
       AND detailrental.rent_num = rental.rent_num 
       AND rental.mem_num = membership.mem_num 
    END 
+0

Count (*) является излишеством здесь , альтернативой существующей может быть 'if (SELECT top (1) 0 FROM membership WHERE mem_num = @MemNum) null: – Serg

+0

Согласовано. Оба top/exist - лучшие альтернативы выполнению счета. –

2

Вы хотите использовать EXISTS()

if NOT EXITS(SELECT 1 FROM Membership WHERE Mem_Num = @MemNum) 
BEGIN 
-- etc 

Вы должны также использовать современный синтаксис для соединяющего ... это гораздо яснее.

Select @MemNum AS 'MemNum', Movie.Movie_Num, Movie_Title, Movie_Year, Movie_Cost, Movie_Genre ,Price_Code 
From Movie 
JOIN Video ON Movie.Movie_Num = Video.Movie_Num 
JOIN DetailRental ON Video.Vid_Num = DetailRental.Vid_Num 
JOIN Rental ON DetailRental.Rent_Num = Rental.Rent_Num 
JOIN Membership ON Rental.Mem_Num = Membership.Mem_Num 
Where @MemNum = Membership.Mem_Num 
0

мне нужна, если заявление, чтобы проверить, является ли число членом существует в таблице

Вы почти сказал это в SQL

if (not exists (select null from Membership where @MemNum = Membership.Mem_Num))... 
Смежные вопросы