forked from bulentgucuk/DBA-Scripts
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathDynamic Stored Procedure Where Clause.sql
More file actions
127 lines (112 loc) · 3.21 KB
/
Dynamic Stored Procedure Where Clause.sql
File metadata and controls
127 lines (112 loc) · 3.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
USE [SahSelect];
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Products_AdminSearch]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[Products_AdminSearch] AS'
END
GO
ALTER PROCEDURE [dbo].[Products_AdminSearch]
@merchantId INT = NULL,
@brand VARCHAR(50) = NULL,
@sku VARCHAR(50) = NULL,
@searchText VARCHAR(50) = NULL,
@startDateBeginning DATETIME = NULL,
@startDateEnd DATETIME = NULL,
@Debug BIT = 0
AS
BEGIN
SET NOCOUNT ON;
-- Main dynamic Query parameters
DECLARE
@SqlQuery NVARCHAR(4000)
, @ParameterDefinition NVARCHAR(2000);
SET @SqlQuery = '
SELECT TOP 10001
p.Id
, p.ProductSourcesId
, p.MerchantId
, p.MerchantProductId
, p.BrandName
, p.Title
, p.[Description]
, p.StartDate
, p.EndDate
, p.ImageURL
, p.[URL]
, p.Price
, p.DiscountPrice
, p.ShippingPrice
, p.CreateDate
, p.LastUpdatedBy
, p.LastUpdateDate
, m.MerchantName
, ps.[Name] AS ''ProductSourceName''
FROM dbo.Products AS p WITH (NOLOCK)
INNER JOIN dbo.Merchants AS m WITH (NOLOCK) ON m.MerchantId = p.MerchantId
INNER JOIN dbo.ProductSources AS ps WITH (NOLOCK) ON ps.Id = p.ProductSourcesId
WHERE 1=1';
-- Start building the dynamic where clause
-- Check @merchantid
IF @merchantId IS NOT NULL
BEGIN
SET @SqlQuery = @SqlQuery + CHAR(13) + 'AND p.MerchantId = @merchantId';
END
-- Check @brand
IF @brand IS NOT NULL
BEGIN
SET @SqlQuery = @SqlQuery + CHAR(13) + 'AND p.BrandName LIKE ''' + '%' + @brand + '%' + '''';
END
-- Chekc @sku
IF @sku IS NOT NULL
BEGIN
SET @SqlQuery = @SqlQuery + CHAR(13) + 'AND p.MerchantProductId LIKE ''' + '%' + @sku + '%' + '''';
END
-- Check @searchText
IF @searchText IS NOT NULL
BEGIN
SET @SqlQuery = @SqlQuery + CHAR(13) + 'AND (p.Title LIKE ''' + '%' + @searchText + '%' + '''' + ' OR p.[Description] LIKE ''' + '%' + @searchText + '%' + ''')';
END
-- Check @startDateBeginning
IF @startDateBeginning IS NOT NULL
BEGIN
SET @SqlQuery = @SqlQuery + CHAR(13) + 'AND CAST(p.StartDate AS DATE) >= @startDateBeginning';
END
-- Check @startDateEnd
IF @startDateEnd IS NOT NULL
BEGIN
SET @SqlQuery = @SqlQuery + CHAR(13) + 'AND CAST(p.StartDate AS DATE) <= @startDateEnd';
END
-- Check @startDateBeginning and @startDateEnd
IF @startDateBeginning IS NOT NULL OR @startDateEnd IS NOT NULL
BEGIN
SET @SqlQuery = @SqlQuery + CHAR(13) + 'AND (p.EndDate > GETDATE() OR p.EndDate IS NULL)';
END
-- Add the order by clause
Set @SqlQuery = @SqlQuery + CHAR(13) + 'ORDER BY p.ProductSourcesId ASC;';
-- Set @ParameterDefinition
SET @ParameterDefinition = ' @merchantId INT,
@brand VARCHAR(50),
@sku VARCHAR(50),
@searchText VARCHAR(50),
@startDateBeginning DATETIME,
@startDateEnd DATETIME';
-- Print the query for visual inspection
IF @Debug = 1
BEGIN
PRINT @SqlQuery;
END
-- Execute @SqlQuery using sp_executesql stored procedure
EXEC sp_executesql
@stmt = @SqlQuery
, @params = @ParameterDefinition
, @merchantId = @merchantId
, @brand = @brand
, @sku = @sku
, @searchText = @searchText
, @startDateBeginning = @startDateBeginning
, @startDateEnd = @startDateEnd;
END