sunettew
Привет
Вы должны продумать свою проблему. Вы хотите, чтобы люди искали по имени или адресу и возвращали все связанные данные? Или вы хотите искать по имени и адресу, и они должны выстроиться в очередь, иначе результат не будет возвращен. Логические операторы хорошо понятны при работе с наборами данных. Видеть Логические операторы (Transact-SQL)[^]
Вот пример, который вы можете использовать для своего кода:
CREATE TABLE #Dept
(
id INT IDENTITY(1,1) PRIMARY KEY,
name VARCHAR(50) NULL,
[Address] VARCHAR(120) NULL,
scholaid VARCHAR(50) NULL
)
INSERT INTO #Dept
(name ,[Address], scholaid )
VALUES('Ben Smith','1 Smith Street','No'),
('Sam Coldwell','1 Sam Street','No'),
('John Max','1 Max Street','Yes'),
('Maggie Curtis','1 Curtis Street','No'),
('Susan Jason','1 Jason Street','Yes')
INSERT INTO #Dept
([Address], scholaid )
VALUES('2 Mystreet','No')
INSERT INTO #Dept
(name , scholaid )
VALUES('Chris Mason','No')
DECLARE @name VARCHAR(50) = NULL,
@Address VARCHAR(500) = NULL
--Need to know what the name is and the address and they have to line up or no result will be returned
SET @name = 'Smith'
SET @Address = 'Smith'
SELECT u.id,
u.name,
u.Address,
u.scholaid
FROM #Dept u
WHERE (ISNULL(u.name,'') like '%'+ISNULL(@name,'')+'%') AND (ISNULL(u.Address,'') like '%'+ISNULL(@Address,'')+'%')
--to allow for multiple values where either one can be blank we need to use a union
--Example 1
SET @name = 'Smith'
SET @Address = 'Smith'
SELECT u.id,
u.name,
u.Address,
u.scholaid
FROM #Dept u
WHERE (ISNULL(u.name,'') like '%'+ISNULL(@name,'')+'%')
UNION
SELECT u.id,
u.name,
u.Address,
u.scholaid
FROM #Dept u
WHERE (ISNULL(u.Address,'') like '%'+ISNULL(@Address,'')+'%')
--Example 2
SET @name = 'Smith'
SET @Address = 'Max'
SELECT u.id,
u.name,
u.Address,
u.scholaid
FROM #Dept u
WHERE (ISNULL(u.name,'') like '%'+ISNULL(@name,'')+'%')
UNION
SELECT u.id,
u.name,
u.Address,
u.scholaid
FROM #Dept u
WHERE (ISNULL(u.Address,'') like '%'+ISNULL(@Address,'')+'%')
DROP TABLE #Dept