1

У меня есть таблица под названием «colamer», как показано ниже:TSQL: Как Join/Объединить строки одного столбца в список CSV

ID Title SectionID 
1  abc  231 
2  abc  232 
3  pqr  95 
4  jkl  165 

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

CREATE PROCEDURE CheckDuplicateBannerforSection 
/* 
     colamer_CheckDuplicateBannerforSection 'abc','231,232,233',NULL 
*/ 

@BannerTitle NVARCHAR(200),   
@SectionId VARCHAR(50),   
@Result VARCHAR(100) OUT   
AS   
BEGIN   
SET @Result = 1   
    BEGIN 
     IF EXISTS   
    (SELECT 1 FROM colamer WHERE Title= @BannerTitle 
And SectionID in(SELECT value FROM dbo.colamer_fn_Split1(@SectionId ,','))) 
    END 
SELECT @Result 

END

Я хочу выхода: @result = 231232

+0

Что делает функция 'dbo.colamer_fn_Split1' делать? –

+0

Сохраните усилия, чтобы ответить, я понял это. :) –

+0

он разбивает строку ,, –

ответ

0
CREATE PROCEDURE Mercola_CheckDuplicateBannerforSection 
/* 
     Mercola_CheckDuplicateBannerforSection 'abc','231,232,233',NULL 
*/ 

@BannerTitle NVARCHAR(200),   
@SectionId VARCHAR(50),   
@Result VARCHAR(100) OUT   
AS   
BEGIN   
SET @Result = 1   
    BEGIN 
IF EXISTS (SELECT 1 FROM colamer 
      WHERE Title = @BannerTitle 
      And SectionID 
      in(SELECT value FROM 
      dbo.colamer_fn_Split1(@SectionId ,','))) 
BEGIN 
    SELECT top 1 @Result=SectionID FROM colamer 
    WHERE Title = @BannerTitle 
    And SectionID in(SELECT value FROM 
    dbo.colamer_fn_Split1(@SectionId ,',')) 
END 
    END 
SELECT @Result 

END 
+0

Неверный синтаксис рядом с '@Result'. –

+0

@Pranav check now updated –

+0

вывод должен быть 231,232 –

1

Попробуйте это:

CREATE PROCEDURE CheckDuplicateBannerforSection 
/* 
     Mercola_CheckDuplicateBannerforSection 'abc','231,232,233',NULL 
*/ 

@BannerTitle NVARCHAR(200),   
@SectionId VARCHAR(50),   
@Result VARCHAR(100) OUT   
AS   
BEGIN 
    SELECT @Result = STUFF((SELECT ',' + CONVERT(VARCHAR(50), c.SectionID) 
          FROM colamer c 
          CROSS APPLY dbo.colamer_fn_Split1(@SectionId, ',') AS A 
          WHERE c.SectionID = A.value AND Title = @BannerTitle 
          FOR XML PATH('') 
         ), 1, 1, '' 
         )    
END 
+0

Неверный синтаксис рядом с ключевым словом 'ON'. –

+0

Зачем использовать 'CROSS APPLY'? Это не обязательно. Исходный список 'IN' был в порядке, или' INNER JOIN' будет работать. –

+0

Ошибка: преобразование не удалось при преобразовании значения varchar ',' в тип данных int. –

1

Я предполагаю, что вы ищете что-то вроде этого:

CREATE PROCEDURE CheckDuplicateBannerforSection 

@BannerTitle NVARCHAR(200),   
@SectionId VARCHAR(50),   
@Result VARCHAR(100) OUT   
AS   
BEGIN   
    SET @Result = ''   
    Select @Result = @Result + ',' + Convert(nvarchar, SectionID) 
    from colamer where Title = @BannerTitle and SectionID in(SELECT value FROM dbo.colamer_fn_Split1(@SectionId ,',')) 
END 
+0

Неверный синтаксис рядом с ')'. –

+0

Да, это было избыточно, см. Исправленную версию. – VahidNaderi

Смежные вопросы