Как проверить несколько параметров в SQL Server 2008? - PullRequest
0 голосов
/ 31 марта 2012

Как передать несколько значений хранимой процедуре в SQL Server 2008?

Мой стол выглядит так:

    id  Tag                platform
    1  #class1,#class2      CS
    2  #class1              PS
    3  #class2              CS

Хранимая процедура:

 ALTER PROCEDURE [dbo].[usp_Get]-- 1,"'#class1,#class2'"
    @Appid INT,
    @TagList NVARCHAR (MAX)
    AS

    BEGIN
        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
     SET NOCOUNT ON;

      declare @tags varchar(MAX)
        set @tags = @TagList
        create table #t (tag varchar(MAX))
        set @tags = 'insert #t select ' + replace(@tags, ',', ' union select ')
        exec(@tags)
    Select 
        id FROM dbo.List WHERE ((appid=@Appid)) AND ((Tags IN(select tag from #t)
    END

Если я сделаю запрос

[dbo].[usp_Get] 1,"'#class1'" 

Я получаю только второй ряд. Но в первом ряду также есть #class1 ...

Пожалуйста, скажите мне ........

1 Ответ

0 голосов
/ 31 марта 2012

Я бы посоветовал вам использовать табличные параметры.

Этот вопрос касается отправки значения из среды .NET.

CREATE TYPE VarcharContainer as TABLE (
    [Value] NVARCHAR(MAX)
)

CREATE PROCEDURE [dbo].[usp_Get] (
    @Appid INT,
    @TagList VarcharContainer READONLY
) AS 
BEGIN
    SELECT id FROM dbo.List WHERE appid=@Appid AND Tags IN (select [Value] from @TagList)
END

Это означает, что в столбце есть только один тег. Я настоятельно рекомендую вам избегать денормализации и многозначных полей.

EDIT

Более подробную информацию о табличных параметрах вы можете найти на MSDN

----------------
|   TableName  |
----------------
|   id         |
|   --         |
|   platform   |
----------------

-------------------
|   TableNameTag  |
-------------------
|   TableNameId * |
|   -----------   |
|   TagId *       |
|   -----         |
-------------------

----------------
|   Tag        |
----------------
|   TagName    |
|   TagId      |
|   -----      |
----------------

Это предлагаемая схема. Это соответствует основным правилам правильного отношения

1.Входы в столбцах являются атомарными (или однозначными)

EDIT

Просто чтобы напомнить о вреде денормализации, вот одна из моих любимых цитат

Денормализация почти всегда плохая идея - не делайте этого, если вы действительно не знаете, что делаете. Или вы начнете задавать такие вопросы, как: это , это , это , это , ...

источник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...