У меня возникли некоторые проблемы со следующим sprocSQL Server Если заявление беды
Create PROCEDURE GetMatchingUsers
@id int = NULL,
@lastName varchar(50) = NULL,
@firstName varchar(50) = NULL
AS
BEGIN
SET NOCOUNT ON
DECLARE @q nvarchar(4000),
@paramlist nvarchar(4000)
SELECT @q = 'SELECT Id
, LastName
, FirstName '
SELECT @q = @q + 'FROM Users WHERE 1 = 1'
IF ISNULL(@id, '') <> ''
SELECT @q = @q + ' AND Id = ' + Cast(@id as varchar)
IF ISNULL(@lastName, '') <> ''
SELECT @q = @q + ' AND LastName like ''' + @lastName + '%'''
IF ISNULL(@firstName, '') <> ''
SELECT @q = @q + ' AND FirstName like ''' + @firstName + '%'''
SELECT @q = @q + ' ORDER BY LastName, FirstName '
--PRINT @q
SELECT @paramlist = '
@id int = NULL,
@lastName varchar(50) = NULL,
@firstName varchar(50) = NULL'
EXEC sp_executesql @q, @paramlist,
@id,
@lastName,
@firstName
Я был удивительно, почему следующее, если заявление не считается истинным, если я передать 0 в качестве идентификатора
IF ISNULL(@id, '') <> ''
SELECT @q = @q + ' AND Id = ' + Cast(@id as varchar)
Спасибо за любую помощь.
Я на самом деле хочу, чтобы он конкатенировал строку, если идентификатор прошел в 0. Единственный раз, когда я не хочу, чтобы он входил в блок, это если идентификатор вообще не передается. – AlteredConcept
затем измените значение 0 выше на -1 (то есть: ISNULL (@ Id, -1) <> -1 –