0
我正在創建一個搜索功能,它需要一個關鍵字並在我的數據庫的3個表中的每個指定列中查找。在sql server中優化搜索請求
表1是Utilisateurs
表2是ReserveLocaux
表3中稱爲Utilisateurs_ReserveLocaux並且它是連接用戶和預訂與他們的主鍵的表。
這裏是我想出了迄今爲止
ALTER PROCEDURE Search_ReservLocaux
-- Add the parameters for the stored procedure here
@keyword as varchar(100),
@noUsager as int
AS
declare @searchTerm as varchar(105) = cast('%' + @keyword + '%' as varchar(105))
--Select all reservations information where allowed field include search term
--where the user making the request participates in
--where additional user are part of the same reservation
select distinct a.NoReservation,a.ApprobationProf,a.Commentaire,a.Date,a.HeureDébut,a.HeureFin,a .NoLocal,a.NoReservation,a.PersonnesExt from ReserveLocaux a
join Utilisateurs_ReserveLocaux b on a.NoReservation = b.NoReservation
join Utilisateurs c on c.id= b.NoUsager
where(
a.[Date] like @searchTerm or
a.[HeureDébut] like @searchTerm or
a.[HeureFin] like @searchTerm or
a.[Commentaire] like @searchTerm or
a.[CommentaireGardien] like @searchTerm or
a.[ApprobationProf] like @searchTerm or
a.[NoLocal] like @searchTerm or
a.[Actif] like @searchTerm or
a.[PersonnesExt] like @searchTerm or
b.[NoUsager] like @searchTerm or
b.[NoReservation] like @searchTerm or
c.[NomUsager] like @searchTerm or
c.[PrenomUsager] like @searchTerm
)
and(a.Actif is null or a.Actif = 1)
and b.NoUsager = @noUsager
Return
GO
exec Search_ReservLocaux 'saoindoaisn',3
go
基本上,這個搜索我得到我最需要的信息的。問題是,我還需要查找具有在Utilisateurs_ReserveLocaux表肚裏發現了同樣的預約號碼每個用戶的是:
|Id_User|Id_Reservation|
3 45
4 45
5 32
我需要訪問用戶#3(一個是誰做搜索)和被稱爲「saoindoaisn」的用戶#4。
我知道問題出在最後一行的where語句
b.NoUsager = @noUsager
,但如果我刪除它,我失去了我的數據的安全性,因爲用戶做搜索可以訪問的一切,他是不是參與,如果我保留它,我無法訪問所需的數據。
有人可以幫我找到這條線的替代品嗎? PS:如果不是100%清楚,對不起。
它不起作用。錯誤:**子查詢返回多個值。當子查詢遵循=,!=,<, <= , >,> =或者當子查詢用作表達式時,這是不允許的。**查詢返回@noUsager所做的每個保留。 – ThallForms
@ThallForms。 。 。您的示例數據在每個用戶的表中只有一行。更通用的方法是使用'in'而不是'='。 –
我修改你的查詢,所以而不是b.Id_reservation =(代碼),我用b.Id_reservation IN(代碼),它的工作原理。非常感謝你! – ThallForms