У меня есть эта проблема. В таблице у меня есть столбец, который является типом nvarcar. и строка в этом столбце является row1 = 1; 6 row2 = 12 row3 =6; 5; 67 и т.д... Я пытаюсь искать этот столбец. например, когда я отправляю 1, я пытаюсь добраться только row1. Я использую КАК, но в наборе результатов я получаю row1 и row2.
Как может, я достиг этого, какая-либо справка ценится. Tnx...
Не особо элегантно, но этот выполняет свою работу .
DECLARE @Table TABLE (Row NVARCHAR(32))
INSERT INTO @Table VALUES ('1;6')
INSERT INTO @Table VALUES ('12')
INSERT INTO @Table VALUES ('6;5;67')
SELECT *
FROM @Table
WHERE Row = '1'
OR Row LIKE '%;1'
OR Row LIKE '1;%'
OR Row LIKE '%;1;%'
продолжить ваш комментарий: это работает в SQL Server 2005.
CREATE TABLE Analysis (Text1 NVARCHAR(32))
GO
CREATE PROCEDURE [dbo].[Test] @Key as nvarchar AS
SELECT *
FROM dbo.Analysis
WHERE Text1 = @Key
OR Text1 LIKE '%;'+ @Key
OR Text1 LIKE @Key + ';%'
OR Text1 LIKE '%;' + @Key + ';%'
GO
EXEC Test '1'
DROP PROCEDURE Test
DROP TABLE Analysis
У вас есть четыре варианта расположения ключа:
Следовательно, вы должны выбрать для каждой отдельной возможности, например:
SELECT *
FROM MyTable
WHERE MyColumn = @Key
OR MyColumn LIKE @Key + ';%'
OR MyColumn LIKE '%;' + @Key + ';%'
OR MyColumn LIKE '%;' + @Key
нормализуйте ваши таблицы! , сохранение нескольких значений в одном столбце вызовет у вас горе, если вы будете использовать этот дизайн. Может показаться, что таким способом хранить данные проще, но, как вы видите, сложно выполнять запросы к этим данным, а создаваемые вами запросы будут ужасными и не будут иметь никаких шансов на использование индекса.