Member 12675499 Ответов: 1

Как написать процедуру хранения для оператора поиска для принятия двух значений


Его взятие одного значения и получение вывода и но предоставление двух значений не выполняются и получение значений в выводе

Что я уже пробовал:

USE [HerdDinner]
GO
/****** Object:  StoredProcedure [dbo].[GetUSerListByTwoParameters]    Script Date: 12/12/2016 12:36:24 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[GetUSerListByTwoParameters]
@name varchar(50)=null,
@Address varchar(500)=null

AS
BEGIN

	SET NOCOUNT ON;
	
	Begin
	SELECT 

	u.id,
	u.name,
	u.Address,
	u.scholaid

	from [dbo].[Dept] u

	


	where  (ISNULL(u.name,'') like '%'+ISNULL(@name,'')+'%') and (ISNULL(u.Address,'') like '%'+ISNULL(@Address,'')+'%') 


	End
	

END

1 Ответов

Рейтинг:
2

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