سلام
فکر کنم قبلا زیاد تو سایت این بحث شده، با اینحال یه مثال :
ALTER PROCEDURE usp_get_info
...
@f1 INT = NULL
, @f2 NVARCHAR(50) = NULL
, @f3 CHAR(10) = NULL
...
as
begin
DECLARE @str_select NVARCHAR(4000)
SET @str_select = N''
SET @str_select = N'SELECT f1, f2, f3 from tbl ' + CHAR(13)
...
--شرط
DECLARE @str_where NVARCHAR(2000)
SET @str_where = ''
--تعیین شرط
IF (@f1 IS NOT NULL)
BEGIN
--تعیین شرطهای بعدی
IF @str_where <> ''
SET @str_where = @str_where + 'AND ' + CHAR(13)
SET @str_where = @str_where + ' f1 = ' + CAST(@f1 AS VARCHAR(2)) ' ' + CHAR(13)
END
...
IF (@f2 IS NOT NULL)
BEGIN
--تعیین شرطهای بعدی
IF @str_where <> ''
SET @str_where = @str_where + 'AND ' + CHAR(13)
SET @str_where = @str_where + ' f2 = N''' +@f1 ''' ' + CHAR(13)
END
...
--و الی آخر
--یکی کردن عبارات برای انجام عمل جستجو
IF @str_where <> ''
BEGIN
SET @str_select = @str_select + CHAR(13)
+ ' WHERE ' + @str_where + CHAR(13)
END
SET @str_select = @str_select + CHAR(13)
+ ' ORDER BY f1 DESC'
--انجام جستجو
EXEC(@str_select)
end