Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: ms sql. Ошибка преобразования значения varchar "2705.786" в тип данных int.

Подскажите, пожалуйста!
Встала в ступор из-за какой-то ерунды.

INSERT INTO таблица ( [Значение] ) select 2705.786 проходит нормально,
а INSERT INTO таблица ( [Значение] ) select 2705.786 from таблица2
дает ошибку "Ошибка преобразования значения varchar "2705.786" в тип данных int".

Полей у меня конечно больше, я порезала до одного для тестов, не могу проинсертить float, если он идет из второй таблицы (неважно, напрямую я напишу значение в запросе или оно будет в поле таблицы - а изначально оно как раз содержалось в поле - ошибка одна и та же). В чем проблема?
Тип поля "значение" float в структуре данных
Ответ: dizi,

автор
select 2705.786 from dbo.[Reestr]

дивно...
Вопрос: Динамический запрос. Ошибка преобразования значения varchar в тип данных int.

Есть таблица, в которой столбец Id_s varchar(20)

Делаю обычный запрос
SELECT Id_s FROM Result

Получаю результат
Id_s
0008
0011
0080бис


Делаю запрос
DECLARE @id varchar(20) SET @id = '0011'
SELECT Id_s FROM Result WHERE Id_s=@id

Результат
Id_s
0011


А вот при выполнении динамического запроса
DECLARE @qwery nvarchar(400)
set @qwery = 'select Id_s from Result Where Id_s=0011'


выскакивает "Ошибка преобразования значения varchar "0080бис" в тип данных int."
Откуда берется этот int?
Ответ:
o-o
exec sp_executesql @qwery, N'@id varchar(20)', @id
А для чего нужен sp_executesql?
Вопрос: Ошибка преобразования значения varchar "МР-12" в тип данных int

не могу понять почему выдает ошибку (Ошибка преобразования значения varchar "МР-12" в тип данных int.)
почему группу преобразует в int, это в селекте получается я где-то накрутил? суть надо вывести Ф И О студента у которого оценка от 3 до 4 и курс 4 у него
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
USE NEW
 
IF NOT EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'TimeTable')
BEGIN
CREATE TABLE TimeTable (
FIO VARCHAR(50),
Sredn INT,
[GROUP] VARCHAR(50)
)
END
 
ELSE 
 
BEGIN
DROP TABLE TimeTable
CREATE TABLE TimeTable (
fio VARCHAR(50),
sredn INT,
[GROUP] VARCHAR(50)
)
END
--Создаем курсор
 
DECLARE @cur CURSOR,
@fio VARCHAR(50),
@avg INT,
@GROUP VARCHAR(50),
@fetch_res INT
 
SET @cur = CURSOR SCROLL 
FOR 
WITH cte_1 AS
(
SELECT PERSONS.SURNAME + ' ' + (LEFT(FIRSTNAME,1)+'.') + (LEFT(PATRONAME,1)+'.') AS fio, [GroupName].GroupName AS [GROUP], [MARK].Mark
FROM PERSONS 
JOIN STUD ON PERSONS .id_PERS = STUD.id_PERS
JOIN STUDGROUP ON STUD.id_STUD = STUDGROUP.id_STUD
JOIN [GroupName] ON STUDGROUP.id_group = [GroupName].id_group
JOIN MARK ON STUD.id_STUD = MARK.id_STUD 
JOIN SUBJECTS ON MARK.id_SUBJECTS = SUBJECTS.id_SUBJECTS 
 
WHERE [GroupName].GroupName = 4
 
--JOIN Student_Subject ON Student_Subject.id_Student = Student.id_Student 
--JOIN Subjects ON Subjects.id_Subject = Student_Subject.id_Subject 
--WHERE [Group].Course = 4 
)
SELECT   fio AS 'Ф.И.О.', AVG(Mark) AS 'Средний бал', MAX([GROUP]) AS 'Группа'  
FROM cte_1  
GROUP BY fio 
HAVING /*MIN(Mark)* > 60 and*/ AVG(Mark) BETWEEN 3 AND 4
 
--Откроем курсор
OPEN @cur
 
--Пока есть данные в курсоре - выборка циклом
while (1 = 1)
BEGIN
FETCH NEXT FROM @cur 
INTO @fio, @avg, @GROUP
SET @fetch_res = @@FETCH_STATUS
IF (@fetch_res = -1)
break;
IF (@fetch_res <> -2)
    INSERT INTO TimeTable
    VALUES (@fio, @avg, @GROUP)
END
 
--Закрываем курсор
CLOSE @cur
--Уничтожаем курсор
DEALLOCATE @cur
SELECT * FROM TimeTable
DROP TABLE TimeTable
Ответ: Просто такое задание, тут не должно быть логики) что написано то и стараюсь вывести)) курсор - это медленно... я бы не делал его для таких целей))) ну а проблему я увидел, после создания темы)) просто уже не 1й час сижу, и бдительность притупилась.
И насчёт строки - показывало на открытие курсора (open cur) я бы сам заметил если бы указало на поле с неправильным условием))
Вопрос: Ошибка преобразования значения varchar

Использую следующую хранимку
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
25
USE [Bank]
GO
 
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 
ALTER PROCEDURE [dbo].[Login] @Login TEXT,
@Pass TEXT
 
AS
BEGIN
  DECLARE @FIO VARCHAR(1000)
    
  SELECT
@FIO = [Sotrudniki].FIO
  FROM dbo.Sotrudniki
    ,dbo.Users
  WHERE ([Login] LIKE @Login)
  AND ([Pass] LIKE @Pass)
  AND (Users.ID = Sotrudniki.ID_Users);
 
  RETURN CHAR (@FIO);
END;
При выполнении её выдаёт ошибку

Сообщение 245, уровень 16, состояние 1, процедура Login, строка 18
Ошибка преобразования значения varchar "Сергеев Сергей Сергеевич" в тип данных int.


T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
USE [Bank]
GO
 
DECLARE @return_value int
 
EXEC    @return_value = [dbo].[Login]
        @Login = N'111',
        @Pass = N'111'
 
SELECT  'Return Value' = @return_value
 
GO
Где что не так?

Добавлено через 21 минуту
Разобрался сам в 17 строке просто надо написать

Sotrudniki.FIO
Ответ:
Сообщение от 19boom96
почему результат отображается в столбце без названия?
SELECT @FIO AS FIO
Так выведет с названием столбца.
Вопрос: Ошибка преобразования значения varchar в тип данных int

Доброго времени суток!

Есть три простые таблицы в базе Shop:

первая - All_buy с данными о товарах:

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(
 tovar_id INTEGER  IDENTITY (1,1) NOT NULL PRIMARY KEY,
 date_buy datetime NOT NULL,
 t_id INTEGER NOT NULL REFERENCES tovar(t_id),
);
 
  tovar_id |   date_buy     |t_id
----------------------------------
      1    |   2012-01-01   |  1
----------------------------------
      2    |   2012-02-02   |  2
----------------------------------
      3    |   2013-02-02   |  8
..................................
вторая - tovar с видами товаров
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
(
 t_id INTEGER  IDENTITY (1,1) NOT NULL PRIMARY KEY,
 t_name VARCHAR(50)NOT NULL
);
 
t_id       |   t_name   
----------------------------------
      1    |    fridge
----------------------------------
      2    |   iron  
----------------------------------
      3    |   kettle
..................................
и третья Users - с пользователями, и разрешениями - в поле u_permission задано какие группы товаров они должны видеть - кто то должен видеть только товары 1-й группы, кто то только 45-й и 80-й и тд
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(
 u_id INTEGER  IDENTITY (1,1) NOT NULL PRIMARY KEY,
 u_name VARCHAR(50)    NOT NULL
 u_permission VARCHAR(50)    NOT NULL
);
 
u_id       |    u_name      |  u_permisson
---------------------------------------------
      1    |   Stepanov     |     '1','2' 
--------------------------------------------
      2    |   Sergeev      |      '2','4'
--------------------------------------------
      3    |   Pavlov       |    '34','76' 
..................................
Я хочу выводить только те товары, которые может видеть пользователь например Stepanov, делаю так:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
SELECT          [shop].[dbo].[all_buy].[tov_id]
               ,[shop].[dbo].[all_buy].[date_buy]
               ,[shop].[dbo].[tovar].[t_name]
FROM [shop].[dbo].[all_buy],[shop].[dbo].[tovar]
 
WHERE 
 ([shop].[dbo].[tovar].[t_id]=[shop].[dbo].[all_buy].[t_id])
 
AND
 [shop].[dbo].[all_buy].[t_id] IN
 (SELECT [shop].[dbo].[users].[u_permission] FROM [shop].[dbo].[users] 
  WHERE [shop].[dbo].[users].[u_name]='Stepanov')
SQL
1
2
(SELECT [shop].[dbo].[users].[u_permission] FROM [shop].[dbo].[users] 
  WHERE [shop].[dbo].[users].[u_name]='Stepanov')
возвращает разрешения для Stepanov.
результат -
SQL
1
Ошибка преобразования значения VARCHAR "'1','2'" в тип данных INT.
но если написать вместо этого select
SQL
1
2
AND
 [shop].[dbo].[all_buy].[t_id] IN ('1','2')
то всё нормально выведет. Вопрос, почему не преобразуется поле , содержащее
'1','2'.
Спасибо.
Ответ: связь JOIN идентична условию в WHERE, т.к. оставит только те записи из all_buy, которым есть соответствие по [t_id] и в UserPermission.

Просто стиль твоего первоначального запроса, где таблицы через запятую, а связи в WHERE терпеть не могу, т.к. пропустить связь при множестве таблиц очень просто.
Вопрос: BULK INSERT Ошибка преобразования массовой загрузки данных (усечение) в строке 1, столбце 2

Всем привет!
Пытаюсь заполнить такую таблицу с помощь BULK INSERT

SQL
1
2
3
4
5
6
7
CREATE TABLE [dbo].[Supplers](
    [Suppler NUMBER][INT] IDENTITY(1,1) NOT NULL,
    [Suppler Name][VARCHAR](20) NOT NULL,
    [STATUS][SMALLINT] NULL,
    [City][VARCHAR](20) NULL
)
GO
SQL
1
2
3
4
BULK INSERT [mydb].[dbo].[Supplers]
    FROM 'C:\Users\yser\YandexDisk\Education\5 semestr\DataBases\Lab_1\Data\out\Supplers.txt'
    WITH (CODEPAGE = 'ACP', DATAFILETYPE = 'char', FIELDTERMINATOR = '\t', ROWTERMINATOR = '\n');
GO
Ошибка:
Сообщение 4863, уровень 16, состояние 1, строка 6
Ошибка преобразования массовой загрузки данных (усечение) в строке 1, столбце 2 (Suppler Name).

В текстовом файле, во втором столбце самая длинная строка 19 символов.

В чем проблема?
Ответ: Расширьте поле...
например
SQL
1
[Suppler Name][VARCHAR](200) NOT NULL
Вопрос: Спасти базу, преобразование даты varchar-timestamp

ДОбрый день.. ССЗБ, короче..

Есть таблица и в ней поле Varchar(20). Туда писал дату-время, но строкой (аля timestamp).
Потом понял, что ошибся, попробовал изменить тип поля поле на timestamp - получилось (через ibexpert)

Но что-то пошло не так и теперь табличка нечитабельна..
ODBC и IBExpert говорят ошибку

conversion error from string ""

Как исправить?
Ответ:
SQL> show table ORDERS;
ID                              INTEGER Not Null
MANAGER                         VARCHAR(30) Nullable
CLIENT                          VARCHAR(30) Nullable
ORDERNUM                        VARCHAR(70) Nullable
ITM_ORDERNUM                    VARCHAR(100) Nullable
FASAD_MAT                       VARCHAR(30) Nullable
FASAD_MODEL                     VARCHAR(30) Nullable
FASAD_PG_WIDTH                  INTEGER Nullable
TEXTURE                         VARCHAR(50) Nullable
FIL_MAT                         VARCHAR(50) Nullable
FIL_MODEL                       VARCHAR(50) Nullable
COLOR                           VARCHAR(100) Nullable
FIL_COLOR                       VARCHAR(50) Nullable
COLOR_TYPE                      VARCHAR(50) Nullable
COLOR_LAK                       VARCHAR(50) Nullable
COLOR_PATINA                    VARCHAR(100) Nullable
ORDER_GENERALSQ                 FLOAT Nullable
ORDER_FASADSQ                   FLOAT Nullable
GLASS                           VARCHAR(50) Nullable
PRIMECH                         VARCHAR(300) Nullable
ORDER_COST_PRICECOLUMN          SMALLINT Nullable
ORDER_COST                      INTEGER Nullable
ORDER_PAY                       INTEGER Nullable
ORDER_TOTAL_COST                INTEGER Nullable
ORDER_DISCOUNT                  INTEGER Nullable
ORDER_COST_PACK                 INTEGER Nullable
ORDER_COST_GLASS                INTEGER Nullable
FACT_DATE_RECEIVE               VARCHAR(20) Nullable
FACT_DATE_FIRSTSAVE             VARCHAR(20) Nullable
FACT_DATE_LASTSAVE              VARCHAR(20) Nullable
FACT_DATE_CALCCOST              VARCHAR(20) Nullable
FACT_DATE_EXPORT_ITM            VARCHAR(20) Nullable
PLAN_DATE_FIRSTSTAGE            VARCHAR(20) CHARACTER SET NONE Nullable
PLAN_DATE_PACK                  VARCHAR(20) CHARACTER SET NONE Nullable
FACT_DATE_PACK                  VARCHAR(20) CHARACTER SET NONE Nullable
FACT_DATE_ORDER_OUT             VARCHAR(20) CHARACTER SET NONE Nullable
ORDER_STATUS                    FLOAT Nullable
FACT_DATE_ORDER_CANCEL          VARCHAR(20) Nullable
REASON_ORDER_CANCEL             VARCHAR(300) Nullable
USER_ORDER_CANCELED             VARCHAR(20) Nullable
ORDER_TYPE                      VARCHAR(20) Nullable
TEXTURE_COMMENT                 VARCHAR(50) Nullable
COLOR_LAK_COMMENT               VARCHAR(50) Nullable
COLOR_PATINA_COMMENT            VARCHAR(101) Nullable
PRISAD                          VARCHAR(20) Nullable
CONSTRAINT FK_ORDERS_1:
  Foreign key (ORDER_STATUS)    References LIST_STATUSES (STATUS_NUM)
CONSTRAINT PK_ORDERS:
  Primary key (ID)
CONSTRAINT UNQ1_ORDERS:
  Unique key (ITM_ORDERNUM)

Triggers on Table ORDERS:
ORDERS_BI, Sequence: 0, Type: BEFORE INSERT, Active
SQL>
Вопрос: Ошибка внутри транзакции и откат

Вот код из хелпа
IF OBJECT_ID(N't2', N'U') IS NOT NULL
    DROP TABLE t2;
GO
IF OBJECT_ID(N't1', N'U') IS NOT NULL
    DROP TABLE t1;
GO
CREATE TABLE t1
    (a INT NOT NULL PRIMARY KEY);
CREATE TABLE t2
    (a INT NOT NULL REFERENCES t1(a));
GO
INSERT INTO t1 VALUES (1);
INSERT INTO t1 VALUES (3);
INSERT INTO t1 VALUES (4);
INSERT INTO t1 VALUES (6);
GO
SET XACT_ABORT OFF;
GO
BEGIN TRANSACTION;
INSERT INTO t2 VALUES (1);
INSERT INTO t2 VALUES (2); -- Foreign key error.
INSERT INTO t2 VALUES (3); -- Эта команда выполняется!
COMMIT TRANSACTION;
GO
SELECT *
    FROM t2; -- две строки 1 и 3, как и ожидалось
GO


вот мой код
GO
SET XACT_ABORT off;
GO
 
begin transaction;
insert into waregroups values(154, 'test', 0, 0, 0);
select * from waregroups where code = 154;	--результат есть
update Stat set ConfigVersion = 'qwewrt' where ID = 1;	-- тут ошибка	 преобразования значения varchar "qwewrt" в тип данных int.
select * from waregroups where code = 154; -- запрос не обрабатывается
commit transaction;

go
select * from waregroups where code = 154; -- результат пустой


Я глаза сломал уже, не вижу принципиальной разницы. В Справке написано
Если выполнена инструкция SET XACT_ABORT OFF, в некоторых случаях выполняется откат только вызвавшей ошибку инструкции языка Transact-SQL, а обработка транзакции продолжается. В зависимости от серьезности ошибки возможен откат всей транзакции при выполненной инструкции SET XACT_ABORT OFF

Итак вроде уровень ошибки в обоих примера одинаковый.
И еще попутно вопрос в продолжение этой же темы, может кто подскажет. С таким поведением я столкнулся в программе, соеденение с сервером через ADOConnection.
код такой
Connection.BeginTrans;
....
// Тот же ошибочный запрос
try
  qryTest.SQL.Add('update Stat set ConfigVersion = ''qwewrt'' where ID = 1');  
  qryTest.ExecSQL;
  Connection.CommitTrans;
except
  // тут Connection.InTransaction = true Почему TRUE, если она откатиться должна согласно приведенному выше примеру???? Перезапуск???
  Connection.RollBackTrans;
end
Ответ: invm, все, понял, спасибо
Вопрос: Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)

Коллеги, нужна помощь.

Попал в руки старый чужой проект, который надо было немного доработать. До этого никогда с FireBird дел не имел (я ораклист со стажем). При добавлении нового интерфейса в проект столкнулся с необъяснимой ошибкой. Выражается она в том, что в интерфейсе проекта в гриде одно (и только одно!) поле показывается с ошибочным значением.

Теперь подробно. В FB есть вьюха со следующим кусочком кода:

create view ... as select 
 ....
  ,cast(iif(mc.is_closed=1,null,
             DATEDIFF( DAY , cast(( select max(oo.orderdate) from orders oo where oo.pcode = mc.pcode
                                  ) as date), date 'TODAY')
            ) as bigint) as last_visit, 
 ...
from .....


Смысл этого поля - показать, сколько дней прошло с момента оформления последнего объекта типа ORDER.

Содержимое этой вьюхи я показываю в гриде, реализованном на компоненте TDBGridEh из библиотеки EhLib версии 4. Для доступа к данным используется библиотека FIBplus версии 7.6, компонент FIBDataSet.
В компоненте созданы статические поля (Fields), т.к. есть потребность в полях тип Lookup. Теперь собственно проблема: при открытии этой View из средства SQL-разработки (IBExpert) я вижу корректное значение этого поля (неоднократно проверял вручную по исходным таблицам). Но вот при запуске моего проекта в соответствующей колонке видны значения на 2 или 3 единицы МЕНЬШЕ !!!!! Ну т.е. через IBExpert вижу, например, значение поля "3", а в интерфейсе своего проекта - "1". Подобное уменьшение значения происходит по всей колонке (т.е. по всем строкам датасета).

Столкнувшись с проблемой впервые, подумал, что причина кроется в статически созданных полях (я тогда активно менял наполнение той самой вьюхи, и подумал, что идет неправильный мапинг полей на буфер строки данных ), и заново пересоздал все Fields объекта FIBDataSet. Ошибка ушла, значения стали показываться корректные. НО! Через несколько дней, НА ТОМ ЖЕ exe-ФАЙЛЕ ошибка вернулась. Я опять запускаю Delphi, удаляю все Fields и пересоздаю их заново - проблема уходит. Опять не трогаю проект, опять проходит 2-3 дня - и опять ошибка в визуализации!!!! И опять пересоздание Fields решает проблему.

Коллеги, какие есть идеи о причинах подобной мистики?
Ответ:
ёёёёё

Неправильное заключение.
IBExpert после завершения каждого запроса закрывает его хэндл, поэтому ты и получаешь разные данные без View.


Понятно. В данном случае имеем, что вычисление константы происходит в момент открытия хэндла.

Но у меня ситуация несколько иная. Фиксация значения происходила в момент компиляции VIEW (и я это уже проверил экспериментально). Не очень понимаю, при чем тут хэндл.
Вопрос: Ошибка в запросе при выполнении объединения varchar

Добрый день.

Есть запрос объединяющий 2 varchar(250):

SELECT 
t2.[Info]+t4.[INFO]  
FROM AESBASES.dbo.RALARM t1
left join AESBASES.dbo.places t2 on t1.IDOtis=t2.IDOtis
left join AESBASES.dbo.Technik_id t3 on t1.IDTech=t3.tech_id
left join CARDS t4 on t2.OrgID=t4.ORGID and t2.Otis=t4.OTISNUMBER
where 
WHEN_DATE>=getdate()-10
and t1.IDTech=142 and t1.KKP=0
order by WHEN_DATE


При его выполнении выходит ошибка:
Не удалось выполнить неявное преобразование значения varchar в varchar, поскольку параметры сортировки значений являются неразрешимыми вследствие конфликта параметров сортировки.
Как исправить, чтобы запрос исполнялся?
Ответ: Да. Спасибо!
t2.[Info]+t4.[INFO] collate Cyrillic_General_CI_AS
помогло