Ошибка разбора как типа данных integer

Заполнение отчетного периода в Расчете по ФСС

пользователь

Регистрация: 18.04.2012

Если при заполнении Расчета по ФСС оставить незаполненными два поля после Отчетного периода 06 / , то программа автоматически подставляет в эти поля — -.
Проверочные программы (бухсофт и такском) пишут на это:
«Ошибка разбора »—» как типа данных integer.Не удалось проанализировать атрибут «NumDot» со значением «—«.
и
«Выявлены ошибки:
Файл не соответствует схеме. Элемент: ‘Титул’ параметр ‘Титульный лист. Номер обращения за дотацией’ значение ‘—‘ некорректно. Данный параметр должен быть целым числом длиной до 2 знаков.
Выявлены предупреждения:
Титульный лист. Номер обращения за дотацией должен быть числом из двух знаков: 01, 02, 03 и т.д.»

Если же перед сохранением на МН вручную убрать эти черточки, то проверка проходит без ошибок.

  • 92 просмотра

Microsoft SQL Server 2008 (SP1), getting an unexpected ‘Conversion failed’ error.

Not quite sure how to describe this problem, so below is a simple example. The CTE extracts the numeric portion of certain IDs using a search condition to ensure a numeric portion actually exists. The CTE is then used to find the lowest unused sequence number (kind of):

CREATE TABLE IDs (ID CHAR(3) NOT NULL UNIQUE);

INSERT INTO IDs (ID) VALUES ('A01'), ('A02'), ('A04'), ('ERR');

WITH ValidIDs (ID, seq)
AS 
(
 SELECT ID, CAST(RIGHT(ID, 2) AS INTEGER)
   FROM IDs 
  WHERE ID LIKE 'A[0-9][0-9]'
)
SELECT MIN(V1.seq) + 1 AS next_seq
  FROM ValidIDs AS V1
 WHERE NOT EXISTS (
                   SELECT * 
                     FROM ValidIDs AS V2
                    WHERE V2.seq = V1.seq + 1
                  );

The error is, ‘Conversion failed when converting the varchar value ‘RR’ to data type int.’

I can’t understand why the value ID = 'ERR' should be being considered for conversion because the predicate ID LIKE 'A[0-9][0-9]' should have removed the invalid row from the resultset.

When the base table is substituted with an equivalent CTE the problem goes away i.e.

WITH IDs (ID)
AS
(
 SELECT 'A01'
 UNION ALL 
 SELECT 'A02'
 UNION ALL 
 SELECT 'A04'
 UNION ALL 
 SELECT 'ERR' 
),
ValidIDs (ID, seq)
AS 
(
 SELECT ID, CAST(RIGHT(ID, 2) AS INTEGER)
   FROM IDs 
  WHERE ID LIKE 'A[0-9][0-9]'
)
SELECT MIN(V1.seq) + 1 AS next_seq
  FROM ValidIDs AS V1
 WHERE NOT EXISTS (
                   SELECT * 
                     FROM ValidIDs AS V2
                    WHERE V2.seq = V1.seq + 1
                  );

Why would a base table cause this error? Is this a known issue?


UPDATE @sgmoore: no, doing the filtering in one CTE and the casting in another CTE still results in the same error e.g.

WITH FilteredIDs (ID)
AS 
(
 SELECT ID
   FROM IDs 
  WHERE ID LIKE 'A[0-9][0-9]'

), 
ValidIDs (ID, seq)
AS 
(
 SELECT ID, CAST(RIGHT(ID, 2) AS INTEGER)
   FROM FilteredIDs 
)
SELECT MIN(V1.seq) + 1 AS next_seq
  FROM ValidIDs AS V1
 WHERE NOT EXISTS (
                   SELECT * 
                     FROM ValidIDs AS V2
                    WHERE V2.seq = V1.seq + 1
                  );

Microsoft SQL Server 2008 (SP1), getting an unexpected ‘Conversion failed’ error.

Not quite sure how to describe this problem, so below is a simple example. The CTE extracts the numeric portion of certain IDs using a search condition to ensure a numeric portion actually exists. The CTE is then used to find the lowest unused sequence number (kind of):

CREATE TABLE IDs (ID CHAR(3) NOT NULL UNIQUE);

INSERT INTO IDs (ID) VALUES ('A01'), ('A02'), ('A04'), ('ERR');

WITH ValidIDs (ID, seq)
AS 
(
 SELECT ID, CAST(RIGHT(ID, 2) AS INTEGER)
   FROM IDs 
  WHERE ID LIKE 'A[0-9][0-9]'
)
SELECT MIN(V1.seq) + 1 AS next_seq
  FROM ValidIDs AS V1
 WHERE NOT EXISTS (
                   SELECT * 
                     FROM ValidIDs AS V2
                    WHERE V2.seq = V1.seq + 1
                  );

The error is, ‘Conversion failed when converting the varchar value ‘RR’ to data type int.’

I can’t understand why the value ID = 'ERR' should be being considered for conversion because the predicate ID LIKE 'A[0-9][0-9]' should have removed the invalid row from the resultset.

When the base table is substituted with an equivalent CTE the problem goes away i.e.

WITH IDs (ID)
AS
(
 SELECT 'A01'
 UNION ALL 
 SELECT 'A02'
 UNION ALL 
 SELECT 'A04'
 UNION ALL 
 SELECT 'ERR' 
),
ValidIDs (ID, seq)
AS 
(
 SELECT ID, CAST(RIGHT(ID, 2) AS INTEGER)
   FROM IDs 
  WHERE ID LIKE 'A[0-9][0-9]'
)
SELECT MIN(V1.seq) + 1 AS next_seq
  FROM ValidIDs AS V1
 WHERE NOT EXISTS (
                   SELECT * 
                     FROM ValidIDs AS V2
                    WHERE V2.seq = V1.seq + 1
                  );

Why would a base table cause this error? Is this a known issue?


UPDATE @sgmoore: no, doing the filtering in one CTE and the casting in another CTE still results in the same error e.g.

WITH FilteredIDs (ID)
AS 
(
 SELECT ID
   FROM IDs 
  WHERE ID LIKE 'A[0-9][0-9]'

), 
ValidIDs (ID, seq)
AS 
(
 SELECT ID, CAST(RIGHT(ID, 2) AS INTEGER)
   FROM FilteredIDs 
)
SELECT MIN(V1.seq) + 1 AS next_seq
  FROM ValidIDs AS V1
 WHERE NOT EXISTS (
                   SELECT * 
                     FROM ValidIDs AS V2
                    WHERE V2.seq = V1.seq + 1
                  );

#asp.net #sql

#asp.net #sql

Вопрос:

Ниже приведен мой код хранимой процедуры SQL. Пожалуйста, обратите внимание, что это торговый сайт. Когда я отправляю товары и предоставляю скидку на общую сумму (например, 2467-5% = 2345,65 — возвращаемое значение), а затем нажимаю перейти к оплате, я получаю эту ошибку : Error converting data type nvarchar to int .

 Line 211: int result = _com.ExecuteNonQuery(); 
 

Вот мой код:

 create proc [dbo].[usp_ins_and_update_other_cart_details]
    @Guestid varchar(max),
    @DisAmount int,
    @ShipAmount  int,
    @SubTotal int,
    @GrandAmount int
    as 
begin
    if not exists(select Guestid FROM DiscountAndShippingdetails WHERE Guestid =@Guestid)
    begin
        insert into DiscountAndShippingdetails 
              ( Guestid, DisAmount, ShipAmount, SubTotal, GrandAmount ) 
        values(@Guestid,@DisAmount,@ShipAmount,@SubTotal,@GrandAmount);
    end
    else
    begin
        update DiscountAndShippingdetails 
           set DisAmount   = @DisAmount
             , ShipAmount  = @ShipAmount
             , SubTotal    = @SubTotal
             , GrandAmount = @GrandAmount 
         where Guestid     = @Guestid;
    end
end
 

Комментарии:

1. Вам также придется опубликовать свой SQL-запрос.

2. Что это?. Вы должны показать свои усилия. Здесь мы не знаем, что вы назначили для nvarchar и int. Даже мы не знаем, с чего начать с вашего вопроса?

3. Проблема не здесь. Проблема заключается в вашем SQL-запросе. Включите данные varchar и nvarchar в одинарные кавычки.

4. является ли 2345,65 промежуточным итогом или общей суммой?. Если это так, то ваша процедура может быть неправильной. Вы должны изменить тип данных, иначе вам придется преобразовать свои значения в int, а затем попытаться вставить в базу данных.

5. ПОСЛЕ ПРЕДОСТАВЛЕНИЯ СКИДКИ 2345,65 — ЭТО БОЛЬШАЯ СУММА, Я ПЫТАЮСЬ ОКРУГЛИТЬ ЭТО ЗНАЧЕНИЕ, НАПРИМЕР, 2345,65 РАВНО 2346 ЕСТЬ ЛИ КАКОЙ-НИБУДЬ СПОСОБ ОКРУГЛИТЬ ЭТО ДЕСЯТИЧНОЕ ЗНАЧЕНИЕ, ПОЖАЛУЙСТА, ПОМОГИТЕ

Ответ №1:

Основная ошибка заключается только в одном: вы объявили тип данных как один, а отправляете свои данные как какой-то другой. Смотрите, вы объявили как int для всех столбцов, но отправляете значения в виде строки. Это основная причина вашей борьбы. Пожалуйста, следуйте приведенным ниже строкам для вашего следующего шага,

Измените свое объявление следующим образом,

 int subtotal = Convert.ToInt32( Math.Round(Convert.Todouble(lblsubtotal.Text)));
int discount = Convert.ToInt32(Math.Round(Convert.Todouble(lbldiscount.Text))); 
int shipping = Convert.ToInt32(Math.Round(Convert.Todouble(lblScharg.Text))); 
int gradtotal =Convert.ToInt32( Math.Round(Convert.Todouble(lblGrandTotal.Text))); 
int ret= insertOtherdetails(guiid, discount, shipping, subtotal, gradtotal); 
if (ret != 0) 
{ 
   Response.Redirect("~/Checkout.aspx");
} 
 

и измените определение вашей функции следующим образом: insertOtherdetails(string, int, int, int, int)

Комментарии:

1. промежуточный итог строки = lblsubtotal.Text. toString(); строка discount = lbldiscount.Text. toString(); доставка строки = lblScharg.Text. toString(); строка gradtotal = lblGrandTotal.Text. toString(); int ret= insertOtherdetails(guiid, скидка, доставка, промежуточный итог, gradtotal); if (ret != 0) { Ответ. Redirect(«~/Checkout.aspx»); } общий итог — это ярлык asp с именем gradtotal у нас есть четыре промежуточных итога, скидка , доставка, gradtotal

2. уважаемый, теперь я получаю это сообщение об ошибке компилятора: CS1502: наилучшее соответствие перегруженного метода для ‘Cart.insertOtherdetails (string, string, string, string, string, string)’ имеет некоторые недопустимые аргументы Источник ошибки: Строка 384: int shipping = Convert. ToInt32(lblScharg.Text); Строка 385: int gradtotal = Преобразовать. ToInt32(lblGrandTotal.Text); Строка 386: int ret = insertOtherdetails(идентификатор guiid, скидка, доставка, промежуточный итог, gradtotal); Строка 387: если (ret != 0) Строка 388: {

3. Также измените определение вашей функции. если вы обнаружите что-либо подобное в своей части кодирования insertOtherdetails(строка, строка, строка, строка, строка, строка), пожалуйста, измените следующим образом insertOtherdetails(int, int, int, int, int, int)

4. Наилучшее соответствие перегруженного метода для ‘Cart.insertOtherdetails(int, int, int, int, int, int, int)’ имеет некоторые недопустимые аргументы источник ошибки: Строка 386: int ret = insertOtherdetails(идентификатор guiid, скидка, доставка, промежуточный итог, gradtotal);

5. частная строка disCount(двойная ставка) { возврат (Двойной. Синтаксический анализ(lblsubtotal.Text. toString().Trim()) * (скорость / 100)). toString(); } вместо изменения общего итога есть ли какой-либо способ изменить это десятичное значение dicount, чтобы округлить его

Ответ №2:

прежде всего, вам нужно проверить, что ваша строка не является пустой или нулевой, а затем преобразовать ее в целое число.

Если вы хотите преобразовать nvarchar в целое число из c # asp.net используйте следующее:

преобразовать.toint32(yourstringvalue);

и если вы сделаете это из sql-запроса, выполните следующее:

ПРИВЕДЕНИЕ(yourvalue КАК INT)

=============== как вы изменили свой пост. Сначала проверьте, что ваша хранимая процедура возвращает int / string, а затем напишите

результат int = Преобразовать.ToInt32(executequery());

Комментарии:

1. пожалуйста, взгляните выше

2. вам нужно добавить один выходной параметр «@ClientID INT OUTPUT», а затем после операции вставки / обновления установить этот параметр: ВЫБЕРИТЕ @ClientID = SCOPE_IDENTITY()

3. я все еще не понимаю твою точку зрения, бриджеш, есть ли какой-нибудь способ принять или отказаться принимать десятичное значение

I am struggling for a few days with this issue and I can’t figure out how can I fix it.

I would like to group by my table on values 1,2,3,4,5 so I have created a temporary table with this values.

Now I have to INNER JOIN this table with other tables on a.value = #myTempTable.num.

BUT a.value is ntext so I need to CONVERT it what I actually did, but I am getting an error:

Conversion failed when converting the varchar value ‘simple, ‘ to data
type int. (on line 7)

Create table #myTempTable
(
num int
)
insert into #myTempTable (num) values (1),(2),(3),(4),(5)

 SELECT a.name, CONVERT(INT, CONVERT(VARCHAR(12), a.value)) AS value, COUNT(*) AS pocet   
 FROM 
 (SELECT item.name, value.value 
  FROM mdl_feedback AS feedback 
  INNER JOIN mdl_feedback_item AS item 
       ON feedback.id = item.feedback
  INNER JOIN mdl_feedback_value AS value 
       ON item.id = value.item 
   WHERE item.typ = 'multichoicerated' AND item.feedback IN (43)
 ) AS a 
 INNER JOIN #myTempTable 
     on CONVERT(INT, CONVERT(VARCHAR(12), a.value)) = #myTempTable.num
 GROUP BY a.name, CONVERT(INT, CONVERT(VARCHAR(12), a.value)) ORDER BY a.name

 drop table #myTempTable

I am not getting this error without the last INNER JOIN

INNER JOIN #myTempTable on CONVERT(INT, CONVERT(VARCHAR(12), a.value))
= #myTempTable.num

Could someone help me please?

Thanks.

  • Новичок

    • Регистрация: 05.07.2006
    • Сообщений: 149
    • Спасибо: 0

    Ошибка при тестироваии 4-фсс

    13.04.2012, 09:34

    УСНО от 12.04. При тестировании 4-фсс в протоколе проверки написано следующее.

    Протокол проверки отчета ФСС4

    Версия формата : 04

    Отчетный год : 2012

    Отчетный период : 03

    Ошибка проверки Ошибка разбора »» как типа данных integer. Не удалось проанализировать атрибут «KPS_NUM» со значением «».

    Метки:

    Нет



    • Спасибо



      0

  • Новичок

    • Регистрация: 30.10.2007
    • Сообщений: 4011
    • Спасибо: 27

    УСНО от 12.04. При тестировании 4-фсс в протоколе проверки написано следующее.

    Протокол проверки отчета ФСС4

    Версия формата : 04

    Отчетный год : 2012

    Отчетный период : 03

    Ошибка проверки Ошибка разбора »» как типа данных integer. Не удалось проанализировать атрибут «KPS_NUM» со значением «».

    Integer — целое число
    «» (пробел) — символьное данное.
    атрибут должен быть «0»

    Элементарно,



    • Спасибо



      0

    Комментарий

  • lubezniy

    • Регистрация: 01.02.2007
    • Сообщений: 3914
    • Спасибо: 88

    А KPS_NUM согласно 19-му приказу — это код подчинённости.



    • Спасибо



      0

    Комментарий

  • Игорь Ильин

    Сотрудник БухСофт.ру

    • Регистрация: 24.03.2010
    • Сообщений: 744
    • Спасибо: 7

    «Ошибка разбора KPS_NUM» — не заполнен код подчиненности на титульном листе.



    • Спасибо



      0

    Комментарий

  • Местный

    • Регистрация: 16.01.2008
    • Сообщений: 169
    • Спасибо: 2

    [QUOTE=v_i_b;2123443]Integer — целое число
    «» (пробел) — символьное данное.
    атрибут должен быть «0»

    Вставляю 0
    И вот что пишет:
    Протокол проверки отчета ФСС4
    Версия формата : 04
    Отчетный год : 2012
    Отчетный период : 03

    Ошибка проверки «0» нарушает ограничение pattern для «d{4}[1,2,3]». Не удалось проанализировать атрибут «KPS_NUM» со значением «0».



    • Спасибо



      0

    Комментарий

  • lubezniy

    • Регистрация: 01.02.2007
    • Сообщений: 3914
    • Спасибо: 88

    Опять же — код подчинённости. Только в этот раз не пробелы, а 0.



    • Спасибо



      0

    Комментарий

  • Новичок

    • Регистрация: 30.10.2007
    • Сообщений: 4011
    • Спасибо: 27

    УСНО от 12.04. При тестировании 4-фсс в протоколе проверки написано следующее.

    Протокол проверки отчета ФСС4

    Версия формата : 04

    Отчетный год : 2012

    Отчетный период : 03

    Ошибка проверки Ошибка разбора »» как типа данных integer. Не удалось проанализировать атрибут «KPS_NUM» со значением «».

    Нужен переводчик с пацанского(программисткого) на общечеловеческий.



    • Спасибо



      0

    Комментарий

  • Remove From My Forums
  • Question

  • Sorry to ask such a dumb question, but why can I not convert a varchar to int?

    Select [Index Name],  count([adj count]) as 'total', cast([adj count] as int) as 'adj count'--, count([adj count]) as 'total'
    FROM [Test_DB].[dbo].[SPBMI_Count]
    Where [Index Name] in ('S&P Global Ex-U.S. LargeMidCap (US Dollar)','S&P Emerging SmallCap (US Dollar)',
    'S&P Global BMI (US Dollar)', 'S&P Emerging LargeMidCap (US Dollar)',  
    'S&P Global Ex-U.S. SmallCap (US Dollar)')
    group by [Index Name],[adj count]

    The problem is here.

    cast([adj count] as int) as ‘adj count’

    The datatype is varchar(10)

    I tried both cast & Convert; neither works.


    Knowledge is the only thing that I can give you, and still retain, and we are both better off for it.

Answers

  • In follow code, you want to convert string to int:

    cast([adj count] as int)

    Please check if this column has string data or not? You can use follow code:

    Select *
    FROM [Test_DB].[dbo].[SPBMI_Count]
    where [adj count] like '%[a-z]%'
    

    This sample shows the same error:

    declare @test varchar(10) 
    set @test = '1000000000'
    select CAST( @test as int )
    
    set @test = 'test101'
    select CAST( @test as int )


    Saeid Hasani [sqldevelop]

    • Marked as answer by

      Tuesday, June 24, 2014 10:52 PM

0 / 0 / 0

Регистрация: 11.10.2021

Сообщений: 4

1

24.10.2022, 16:59. Показов 702. Ответов 2


Студворк — интернет-сервис помощи студентам

Можете помочь починить или переделать запросы чтобы все работало. Долго парился и вроде настроил а оно все равно не работает

Есть заполненная таблица Customers содержащая следующие данные:

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
USE MNVP_Kvadro;
Go
IF EXISTS (SELECT * FROM sys.tables WHERE NAME = 'Customers ')
    DROP TABLE Customers  
CREATE TABLE Customers  
    (CustomerID INT NOT NULL,
    Customer    VARCHAR(60)     NOT NULL,
    Phone   VARCHAR(10)     NOT NULL,
    Bank    VARCHAR(60)     NOT NULL,
    Account VARCHAR(20)     NOT NULL,
    INN VARCHAR(10)     NOT NULL,
    AddressCust VARCHAR(60)     NOT NULL,
    FioWorker   VARCHAR(60)     NOT NULL,
    PhoneWorker NUMERIC     NOT NULL
 
    CONSTRAINT CustomerID PRIMARY KEY (CustomerID));
GO

Для этой таблицы была разработана следующая хранимая процедура

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
USE [MNVP_Kvadro]
GO
--IF OBJECT_ID ('UpdateCustomers','P')IS NOT NULL
--DROP PROCEDURE UpdateCustomers
--GO
CREATE PROCEDURE UpdateCustomers (  
    @CustomerID INT,
    @Customer   VARCHAR(60), 
    @Phone  VARCHAR(15),    
    @Bank   VARCHAR(60) ,   
    @Account    VARCHAR(25),    
    @INN    VARCHAR(15),     
    @AddressCust    VARCHAR(60), 
    @FioWorker  VARCHAR(60), 
    @PhoneWorker    NUMERIC)
 
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[Customers]([CustomerID],[Customer],[Phone],[Bank],[Account],[INN],[AddressCust],[FioWorker].[PhoneWorker]
)
VALUES (@Customer,@Phone,@Bank,@Account,@INN,@AddressCust,@FioWorker,@PhoneWorker)
RETURN @@ERROR
END

При попытки выполнить эту процедуру вот эти запросом выдавало ошибку:
сообщение: 245, уровень: 16, состояние: 1, процедура: dbo.UpdateCustomers, строка: 15 [строка начала пакета: 2]
Ошибка преобразования значения varchar «Имя Фаимя и все» в тип данных int.

Вот часть запросов которые использовались, но почему то не сработали помогите

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
USE [MNVP_Kvadro]
GO
 
DECLARE @return_value int
 
EXEC    @return_value = [dbo].[UpdateCustomers]
        @CustomerID = 31,
        @Customer = 'Имя Фаимя и все',
        @Phone = '88001044444',
        @Bank= 'банк',
        @Account  = '4217250450949275662',
        @INN = '1234567899',
        @AddressCust = 'nope',
        @FioWorker = 'ф ф ф',
        @PhoneWorker = 880055533322
 
SELECT  'Return Value' = @return_value
 
GO

и

T-SQL
1
2
3
4
5
6
7
8
9
10
11
USE [MNVP_Kvadro]
GO
 
EXEC [dbo].[UpdateCustomers] 31,'Имя Фаимя и все','88001044444','банк','4217250450949275662','1234567899','nope','ф ф ф', 880055533322
 
-- и ещё один
 
USE [MNVP_Kvadro]
GO
 
EXEC [dbo].[UpdateCustomers] 31,'Имя Фаимя и все', 8800122254444,'Банк'4217250120949275662,1234567899,'nope','а а а',8900105555



0



  • Ошибка разбора параметров терминал
  • Ошибка разбора данных сбой разбора пакета android
  • Ошибка разбора параметров на терминале
  • Ошибка разбора xml фатальная ошибка entityref expecting
  • Ошибка разбора xml фатальная ошибка attributes construct error