[英]SQL Stored Procedure adding to statement
问题:
我想将一个值@Test传递到存储过程中,我知道当@Test是某些值时,一切都很好。 但是我想在一个@Test值下过滤表/ Gridview中的几个值。
即用户搜索“红色”,我想显示“红色”,“粉红色”等...
我敢肯定一定有很多例子,但我已经搜索但没有找到它们。 我已经尝试过BEGIN和IF语句。
如果.net,我会添加一个If @Text ='Pink'然后sql = sql&...语句...
到目前为止,我有...
SELECT * FROM TblColours
WHERE
Room LIKE '%' + @sRoom + '%'
or Colours LIKE '%' + @sColours + '%'
IF @sColours = 'Pink'
or Colours = 'Red'
or Colours = 'Shade of Pink'
END
我同意安德鲁(Andrew)的观点,将颜色及其分组存储在单独的表中会容易得多-看起来可能类似于以下内容(使用了两个新表,即#Colours和#Colourgroups)。
-- SETUP TABLES AND VALUES
----------------------------------------------------------------------------------------------
IF OBJECT_ID('tempdb.dbo.#Colours') IS NOT NULL DROP TABLE #Colours
IF OBJECT_ID('tempdb.dbo.#TblColours') IS NOT NULL DROP TABLE #TblColours
IF OBJECT_ID('tempdb..#ColourGroups') IS NOT NULL DROP TABLE #ColourGroups
CREATE TABLE #Colours
( Id INT NOT NULL PRIMARY KEY CLUSTERED
,GroupId INT NOT NULL
,Name VARCHAR(50) NOT NULL)
CREATE TABLE #ColourGroups
( Id INT NOT NULL PRIMARY KEY CLUSTERED
,Name VARCHAR(50) NOT NULL)
CREATE TABLE #TblColours
( Room VARCHAR(50) NOT NULL
,ColourId INT NOT NULL)
INSERT #Colours
SELECT * FROM
(SELECT 1 AS Id, 1 AS GroupId, 'Red' AS Name UNION
SELECT 2 AS Id, 2 AS GroupId, 'Orange' AS Name UNION
SELECT 3 AS Id, 3 AS GroupId, 'Yellow' AS Name UNION
SELECT 4 AS Id, 1 AS GroupId, 'Pink' AS Name UNION
SELECT 5 AS Id, 1 AS GroupId, 'Scarlet' AS Name UNION
SELECT 6 AS Id, 1 AS GroupId, 'Rose' AS Name) AS SomeRandomColours
ORDER BY Id
INSERT #ColourGroups
SELECT * FROM
(SELECT 1 AS Id, 'Red' AS Name UNION
SELECT 2 AS Id, 'Orange' AS Name UNION
SELECT 3 AS Id, 'Yellow' AS Name) AS SomePossibleGroups
ORDER BY Id
INSERT #TblColours Values ('Gail''s Bedroom', 6)
INSERT #TblColours Values ('The Horrid Bathroom', 2)
INSERT #TblColours Values ('The Main DrawingRoom', 5)
INSERT #TblColours Values ('Paul and Barbara''s Bedroom', 4)
INSERT #TblColours Values ('Paul''s Study', 1)
----------------------------------------------------------------------------------------------
-- Include Derived colour working back from the group if you want to find all the colours in
-- the same group as your search.
DECLARE
@sRoom VARCHAR(50) = 'Barbara'
,@sColours VARCHAR(50) = 'Pink'
SELECT DISTINCT
Room.Room
,Colour.Name
FROM #TblColours AS Room
INNER JOIN #Colours AS Colour ON Room.ColourId = Colour.Id
INNER JOIN #ColourGroups AS ColourGroup ON Colour.GroupId = ColourGroup.Id
INNER JOIN #Colours AS DerivedColour ON ColourGroup.Id = DerivedColour.GroupId
WHERE
Room LIKE '%' + @sRoom + '%'
OR Colour.Name = @sColours
OR ColourGroup.Name = @sColours
OR DerivedColour.Name = @sColours
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.