Я бы посоветовал вам использовать табличные параметры.
Этот вопрос касается отправки значения из среды .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
Просто чтобы напомнить о вреде денормализации, вот одна из моих любимых цитат
Денормализация почти всегда плохая идея - не делайте этого, если вы действительно не знаете, что делаете. Или вы начнете задавать такие вопросы, как: это , это , это , это , ...
источник