Как получить множественное значение из таблицы - PullRequest
1 голос
/ 24 ноября 2011

Как разделить строковое значение

Я хочу получить идентификатор ....

Table1

ID 

001
002
003

Запрос

SELECT id FROM Table1 WHERE (id IN ('" & Eid & "'))

If Eid = 001 means It is displaying id 001
If Eid = 001, 002 means id is not displaying

Как сделать запрос для получения нескольких идентификаторов.

Нужна помощь по запросу

Ответы [ 3 ]

2 голосов
/ 24 ноября 2011
CREATE FUNCTION [dbo].[fnGetIDasTable] (
    @ids varchar(MAX), 
    @separator varchar(20)
) RETURNS @retTable TABLE(ID bigint)
BEGIN
    DECLARE @firstComma bigint
    IF (@ids IS NOT NULL)
    BEGIN
        WHILE @ids != ''
        BEGIN
            SET @firstComma = CHARINDEX(@separator, @ids)
            IF @firstComma = 0
            BEGIN
                INSERT INTO @retTable 
                    VALUES (@ids)
                RETURN
            END
            INSERT INTO @retTable 
                VALUES (CONVERT(bigint, SUBSTRING(@ids, 1, @firstComma - 1)))
            SET @ids = SUBSTRING(@ids, @firstComma + 1, LEN(@ids))
        END
    END
    RETURN
END
GO

DECLARE @IdList varchar(MAX) = '1,3'
SELECT id FROM Table1 
    INNER JOIN [dbo].[fnGetIDasTable] (@IdList,',') il ON Table1.id = il.ID
GO
2 голосов
/ 24 ноября 2011

удалить ' кавычки:

SELECT id FROM Table1 WHERE (Personid IN (" & Eid & "))

Ваша версия генерирует

... WHERE (PersonID IN ('001,002'))

, что означает, что в установленных скобках есть значение SINGLE .Без одинарных кавычек:

... WHERE (PersonID IN (001,002))

у вас есть TWO значения в квадратных скобках.

Однако обратите внимание, что начальные 0 могут вызвать проблемы.Они могут быть интерпретированы как восьмеричные значения, поэтому 009 будет интерпретироваться как "10 десятичных".Возможно, вам придется предварительно обработать ваши значения, чтобы превратить их в

... WHERE (PersonID IN ('001', '002))

.

0 голосов
/ 25 ноября 2011

Как и ответ Марка Б., но мое решение немного проще.

SELECT id FROM Table1 WHERE id IN (
                                   replace(
                                           replace('" & Eid & "',' ','')
                                           ,',',''','''
                                          )
                                  )

Первая замена - удаление пробела (если у вас нет места, вы можете удалить эту замену)

Вторая замена заменяет на ','

...