Thiyagu Arockiasamy Ответов: 3

Как передать строковые значения в предложении в SQL?


create PROCEDURE [dbo].[Sp_MultiSearchNews]
       @Topic		   VARCHAR(200) = NULL,
       @pageno		   int   = NULL,
       @pagesize	   int = NULL 
       AS
   BEGIN	  
        IF( @Topic = 'null' )
            BEGIN
                SET @Topic = NULL;
            END;    
        DECLARE @sql NVARCHAR(MAX), @sqlPaging NVARCHAR(MAX);
        SET @sql = 'select distinct NewsID,CompanyID,Companyname,NewsTopic,Topic from MulitSearch_PortalNews WHERE 1=1';        
        IF @Topic IS NOT NULL
        SET @sql = @sql + ' and Topic IN (' + @Topic + ')';
	   DECLARE @count VARCHAR(MAX);
        SET @count = 'select count(*) as TotalCount from ( ' + @sql + ' ) as T';        
	   exec (' select CAST(ROW_NUMBER() OVER(ORDER BY NewsID) AS INT) AS Row, TotalRecords,NewsID,CompanyID,Companyname,NewsTopic,Topic 
	   from ( SELECT ROW_NUMBER() OVER(ORDER BY NewsID ) AS Row,('+@count+') AS TotalRecords ,* from ( '+@sql+' ) as T ) as pageResult 
	   where ( Row between (('+@pageno+' -1)* '+@pagesize+'+1) AND '+@pageno+' * '+@pagesize+' )'  );
    END;


Что я уже пробовал:

1) MulitSearch_Portal - это таблица представлений(views)

Тема-поле-это строка в моей таблице, сохраненная в значениях, разделенных запятыми.

Если я запущу комментарий
--Sp_MultiSearchNews '371,382',1,20
Ниже накапливается ошибка
Ошибка преобразования в тип varchar значение '371,382' в тип данных int.

я устал - набор @рубрика = заменить(@тему , ',' , "' , "') его работать некорректно.

как передать строковые значения в предложении с помощью sql. Цель процедуры - многозадачность.
Пожалуйста, помогите пожалуйста........

0x01AA

Строковые параметры должны быть заключены в кавычки. (' + @Topic + ')'; должно быть (' + ''' + @Topic + ''' + ')';

Thiyagu Arockiasamy

это не работает, сэр. нет никого, кто бы его искал.

0x01AA

Да, я вижу, я ошибся, я пропустил, что вы делаете "в". Каким типом данных является поле "Тема"?

Thiyagu Arockiasamy

Да, сэр, пожалуйста, помогите

Thiyagu Arockiasamy

Строковое поле в теме сэр

Thiyagu Arockiasamy

его значения разделены запятыми

0x01AA

Я имею в виду тип в базе данных, а не параметр SP.

Примечание: используйте кнопку ответа конкретного комментария, на который вы отвечаете. Это имеет то преимущество, что автор комментария, на который вы отвечаете, получает уведомление ;)

Thiyagu Arockiasamy

База данных также строка в теме. Тема (varchar(250), not null) - это поле моей базы данных.

Thiyagu Arockiasamy

Тема-строковое поле в базе данных

3 Ответов

Рейтинг:
2

OriginalGriff

Поскольку вы делаете это в хранимой процедуре-и дважды используете предложение IN , -я бы предложил вам преобразовать список CSV во временную таблицу и использовать ее вместо этого.
Это не слишком сложно: Использование разделенных запятыми строк параметров значений в предложениях SQL IN[^] и это одновременно позволяет обойти проблему "целочисленного преобразования", с которой вы сталкиваетесь, и должно быть более эффективным.


Thiyagu Arockiasamy

да это правильно сэр но не работает на меня

Рейтинг:
16

Karthik_Mahalingam

вам нужно будет передать значение как в этом формате

Sp_MultiSearchNews '''371'',''382''',1,20


отформатируйте данные в c# и передайте их в качестве параметра или напишите функцию для добавления строки в требуемом формате..


Thiyagu Arockiasamy

сэр, это только найти значения в 371 и 382, а не как "371,382" или "382,380" значения

Thiyagu Arockiasamy

например у меня есть
371
382
371
371,382
382 380 записей, но это только поиск по

371
382
371

Karthik_Mahalingam

вы храните значение, разделенное запятыми, в таблице ?

Thiyagu Arockiasamy

Да сэр

Karthik_Mahalingam

используйте этот формат "'371", "382"'

Karthik_Mahalingam

плохой подход, это не простая работа, чтобы запросить csv, как вы ожидаете..
см. мою статью
Как запросить разделенный запятыми столбец значений в SQL[^]

Thiyagu Arockiasamy

хорошо сэр

Karthik_Mahalingam

Привет Тиягу
обратитесь к статье и попробуйте сделать poc и посмотреть.

Thiyagu Arockiasamy

Дорогой сэр, он работает на меня. Спасибо за вашу статью

Karthik_Mahalingam

крутой.

Thiyagu Arockiasamy

Большое спасибо сэр

Karthik_Mahalingam

добро пожаловать

Рейтинг:
0

Vignesh Mani

Привет друг,

Во время выполнения дайте ввод, как показано ниже. Ваш код верен.

Exec Sp_MultiSearchNews '371,382,1,20'


Thiyagu Arockiasamy

Неправильный синтаксис рядом с '*'.

В этом происходит ошибка