Ошибка преобразования при преобразовании значения nvarchar 'abc' в тип данных int в nopcommerce 4.3

Я хочу найти вариант GTIN в списке продуктов администратора. Итак, для этого я предоставляю значение GTIN в процедуре хранения ProductLoadAllPaged. Теперь, когда я ищу значение GTIN в списке продуктов, в это время выдается ошибка с данными, а из консольного приложения появляется сообщение, что

System.Data.SqlClient.SqlException (0x80131904): сбой преобразования при преобразовании значения nvarchar 'abc' в тип данных int.

Вот код добавления процедуры хранения,

ALTER PROCEDURE [dbo].[ProductLoadAllPaged]
(
    @GTIN nvarchar(50) --AWAZ
)
AS
BEGIN
    .....
    
    --filter by vendor
    IF @VendorId > 0
    BEGIN
        SET @sql = @sql + '
        AND p.VendorId = ' + CAST(@VendorId AS nvarchar(max))
    END
    
    --AWAZ
    IF @GTIN is not null
    BEGIN
        SET @sql = @sql + '
        AND p.Gtin = ' +  @GTIN             
    END

    --filter by warehouse
    IF @WarehouseId > 0
    BEGIN
        --we should also ensure that 'ManageInventoryMethodId' is set to 'ManageStock' (1)
        --but we skip it in order to prevent hard-coded values (e.g. 1) and for better performance
        SET @sql = @sql + '
        AND  
            (
                (p.UseMultipleWarehouses = 0 AND
                    p.WarehouseId = ' + CAST(@WarehouseId AS nvarchar(max)) + ')
                OR
                (p.UseMultipleWarehouses > 0 AND
                    EXISTS (SELECT 1 FROM ProductWarehouseInventory [pwi]
                    WHERE [pwi].WarehouseId = ' + CAST(@WarehouseId AS nvarchar(max)) + ' AND [pwi].ProductId = p.Id))
            )'
    END
    
    .....
END

вам нужно поместить @GTIN в кавычки, чтобы считаться изменением символа AND p.Gtin = ' + @GTIN на AND p.Gtin = '' + @GTIN + ''''

eshirvana 14.12.2020 15:42

знаете ли вы, в каком из столбцов или параметре хранится значение «abc»? Вы проверяете, является ли «VendorID» и позже, если «WarehouseID» больше 0. Для этого сравнения SQL необходимо преобразовать «VendorID»/«WarehouseID» в целое число типа данных. Остальная часть вашей процедуры, похоже, не вызывает эту ошибку, ИМХО.

Mathias Fogel 14.12.2020 15:49

@MathiasFogel в GTIN «abc» — это магазин. В противном случае нет никакой связи с идентификатором поставщика и идентификатором склада, который я показываю, потому что вы можете знать, что между идентификатором поставщика и идентификатором склада я добавил код.

s.k.Soni 14.12.2020 15:51

@eshirvana Я использовал ваш код, а также его фильтрацию, но показывая пустые данные, в то время как данные есть.

s.k.Soni 14.12.2020 15:52

@s.k.Soni, ты уверен? Думаю, тебе нужно использовать like

eshirvana 14.12.2020 15:53

почему бы вам не указать GTIN, как вы делаете это с другими параметрами? Нравится: + CAST(@GTIN AS nvarchar(max)) +

Mathias Fogel 14.12.2020 15:53

@MathiasFogel Я пытался, но не получилось.

s.k.Soni 14.12.2020 15:54

@eshirvana, можешь показать синтаксис с моим кодом GTIN?

s.k.Soni 14.12.2020 15:54

@MathiasFogel Если я сделаю ваш код, то он покажет ошибку, т. Е.: Должен объявить скалярную переменную «@GTIN»

s.k.Soni 14.12.2020 15:56

Вы выполняете следующую процедуру: Exec [dbo].[ProductLoadAllPaged] @GTIN='abc' ?

Mathias Fogel 14.12.2020 15:58
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
10
138
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

похоже, вам нужно изменить эту часть кода:

   --AWAZ
    IF @GTIN is not null
    BEGIN
        SET @sql = @sql + '
        AND p.Gtin like ''%' + @GTIN + '%'''            
    END

Идеальный. Большое спасибо за помощь. :)

s.k.Soni 14.12.2020 16:02

Другие вопросы по теме