I do not see the need for dynamic SQL here at all.
I'd use something more like this:
CREATE PROCEDURE dbo.Pr_customers(
@firstname VARCHAR(90)=NULL,
@lastname VARCHAR(90)=NULL,
@age INT=NULL,
@city VARCHAR(90)= NULL,
@country VARCHAR(90) = NULL,
@phone INT=NULL
)
AS
BEGIN
SELECT
* -- Insert complete column list here.
FROM Customers
Where Firstname = Coalesce(@Firstname,Firstname)
AND LastName = Coalesce(@LastName,LastName)
AND Age = Coalesce(@Age,Age)
AND City = Coalesce(@City,City)
AND Country = Coalesce(@Country,Country)
AND Phone = Coalesce(@Phone,Phone)
END
If a parameter isn't supplied, then the value in that column for each row is compared against itself, and therefore automatically matches. If a parameter IS supplied, it filters on that supplied value.