Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MSFT SQL Server - ошибка типа данных (tinyint и text) при записи содержимого поля в переменную

Ответить
Настройки темы
MSFT SQL Server - ошибка типа данных (tinyint и text) при записи содержимого поля в переменную

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


Сообщения: 101
Благодарности: 0

Профиль | Отправить PM | Цитировать


БД под SQL2000. Столкнулся с такой проблемой.
Записываю в переменные поля с различными типами данных из одной таблицы - varchar, tinyint, text

DECLARE @S1 varchar(200)
DECLARE @S2 tinyint(1)
DECLARE @S3 tinyint(1)
DECLARE @S4 text(16)
DECLARE @S5 varchar(300)
DECLARE @S6 tinyint(1)

SELECT @S1 = NAME1
FROM LUT.dbo.NAME
WHERE nID = 10

SELECT @S2 = NAME2
FROM LUT.dbo.NAME
WHERE nID = 27

и т.д.

С типом varchar всё нормально, а tinyint и text не проходят.
При выполнении скрипта в EM получаю:
Server: Msg 2716, Level 16, State 1, Line 1
Column or parameter #-2: Cannot specify a column width on data type tinyint.
Server: Msg 2716, Level 16, State 1, Line 1
Column or parameter #-3: Cannot specify a column width on data type tinyint.
Server: Msg 2716, Level 16, State 1, Line 1
Column or parameter #-4: Cannot specify a column width on data type text.
Server: Msg 2716, Level 16, State 1, Line 1
Column or parameter #-6: Cannot specify a column width on data type tinyint.
Parameter '@S2' has an invalid data type.
Parameter '@S3' has an invalid data type.
Parameter '@S4' has an invalid data type.
Parameter '@S6' has an invalid data type.

Типы данных взяты из EM (таблица->свойства) и соответствуют тому что задал разработчик. Если в EM запустить парсер, то он выдаёт что команда комплит саксесфул.
В чём может быть проблема?

Отправлено: 15:12, 11-10-2008

 

Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


для text и tinyint размерность не указывают

Отправлено: 16:02, 11-10-2008 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


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


Сообщения: 101
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо. В понедельник попробую применить.

Отправлено: 20:40, 11-10-2008 | #3


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


Сообщения: 101
Благодарности: 0

Профиль | Отправить PM | Цитировать


В целом не получается. Т.е. действительно если не указывать размерность, то эта ошибка убирается. Но только для того что бы уступить место уведомлению, что ПОЛЯ С ТАКИМ ТИПОМ ДАННЫХ В ПЕРЕМЕННУЮ ЗАПИСАТЬ НЕЛЬЗЯ.
Отсюда вопрос, а как тогда можно скопировать ячейку из одной таблицы в ячейку другой? Т.е. строка уже там существует и надо просто заменить содержимое ячейки. UPDATE не работает с именами ячеек, только '...' | DEFAULT | NULL. INSERT создаёт новую строчку. Подскажите решение.

Отправлено: 18:41, 13-10-2008 | #4


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Цитата Vi-P:
UPDATE не работает с именами ячеек, только '...' | DEFAULT | NULL. INSERT создаёт новую строчку. Подскажите решение. »
в смысле не работает с именами ячеек? Непонятно
Желателен полный текст скрипта и пример данных и желаемый результат, тогда видно будет, что делать.
update table set @s2 = 'number' where s2=NUM ?

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Отправлено: 08:44, 17-10-2008 | #5


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


Сообщения: 101
Благодарности: 0

Профиль | Отправить PM | Цитировать


Есть две таблицы, например – Table1 и Table2.

Table1
nID NAME1 NAME2 NAME3 NAME4 NAME5 NAME6
1
2
3



Из Table1 надо скопировать поля в table2. Все поля принадлежат одной строке (н-р nID=2). Условие – передавать поля NAME1 и NAME5 через переменные, остальные как угодно, можно также через переменные. Обратиться к строчке могу только по ID (WHERE nID = 2), значение полей неизвестно.

Table2
nID NAME1 NAME2 NAME3 NAME4 NAME5 NAME6
1
2
3
4
5
6


DECLARE @S1 varchar(200)
DECLARE @S2 tinyint
DECLARE @S3 tinyint
DECLARE @S4 text
DECLARE @S5 varchar(300)
DECLARE @S6 tinyint

SELECT @S1 = NAME1
FROM Table1
WHERE nID = 2

SELECT @S2 = NAME2
FROM Table2
WHERE nID = 2

и т.д.

INSERT INTO Table2
(NAME1, NAME2, NAME3, NAME4, NAME5, NAME6)
VALUES (@S1, @S2, @S3, @S4, @S5, @S6)

Не проходит. Натыкаюсь на:
Server: Msg 2739, Level 16, State 1, Line 1
The text, ntext, and image data types are invalid for local variables.


Хорошо. Тогда делаю через переменные только NAME1 и NAME5. Получилось. В Table2 появилась строка nID=7, в которой 2 поля заполнены нужными значениями из Table1. Теперь в эту же строчку (которая nID=7) надо передать оставшиеся значения полей из Table1 nID=2. Как это сделать?

Отправлено: 16:02, 17-10-2008 | #6


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата Vi-P:
Как это сделать? »
прочитать любую книжку про t-sql. Полностью!
Код: Выделить весь код
insert table2
  select nID, NAME1, NAME2, NAME3, NAME4, NAME5, NAME6
    from table1
    where nID=2

Отправлено: 19:51, 17-10-2008 | #7


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


Сообщения: 101
Благодарности: 0

Профиль | Отправить PM | Цитировать


Слушайте, читайте внимательней. УСЛОВИЕ КОПИРОВАНИЯ СЛЕДУЮЩЕЕ -
Цитата Vi-P:
передавать поля NAME1 и NAME5 через переменные, остальные как угодно, можно также через переменные »
(сам себя цитирую ) Два поля через переменные! Если бы мне просто надо было скопировать строчку, то никаких проблем бы это не вызвало! И этой темы бы здесь не было!

Отправлено: 22:10, 18-10-2008 | #8


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Vi-P, у меня такое предложение:
Т.к. все делается в одной транзакции, то можно сделать так:
Открыть транзакцию, написать
Цитата Vi-P:
INSERT INTO Table2
(NAME1, NAME2, NAME3, NAME4, NAME5, NAME6)
VALUES (@S1, @S2, @S3, @S4, @S5, @S6) »
Цитата Vi-P:
через переменные только NAME1 и NAME5. Получилось. В Table2 появилась строка nID=7, в которой 2 поля
заполнены нужными значениями из Table1. »
В итоге у нас имеется строка с максимальным nID в Table2.
Накидал вот такой код, попробуйте немного видоизменить и применить:

Код: Выделить весь код
DECLARE @S1 varchar(20)
DECLARE @S2 varchar(20)
DECLARE @S3 varchar(20)
DECLARE @S4 varchar(20)
DECLARE @S5 varchar(20)
DECLARE @S6 varchar(20)


delete from table2 ' удаляем все данные из второй таблицы для теста


' определяем переменные
SELECT @S1 = NAME1 
FROM Table1
WHERE nID = 2

SELECT @S2 = NAME2 
FROM Table1
WHERE nID = 2

SELECT @S3 = NAME3
FROM Table1
WHERE nID = 2

SELECT @S4 = NAME4
FROM Table1
WHERE nID = 2

SELECT @S5 = NAME5 
FROM Table1
WHERE nID = 2

INSERT INTO Table2
(NAME1, NAME5 )
VALUES (@S1, @S5)

'делаем просмотр всех данных для просмотра
select * from table1

select * from table2

' Собственно, само обновление нужными данными
update table2 set name2=@S2, name3=@s3, name4=@s4 where table2.nid=(select max(nid) from table2)
' И просматриваем конечный результат
select * from table2
При первом просмотре в table2 видим:
Код: Выделить весь код
4	name11    	NULL	NULL	NULL	name55
при последнем просмотре видим:
Код: Выделить весь код
4	name11    	name22    	name33    	name44    	name55

Подойдет вам такое решение?

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Отправлено: 02:46, 20-10-2008 | #9


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


Сообщения: 101
Благодарности: 0

Профиль | Отправить PM | Цитировать


Хм.... НЕ ПОДОЙДЁТ!!!!!!! (т.е. конечно всё равно спасибо, но...)
У меня несколько полей, а именно NAME2 NAME3 NAME4 NAME6 с типом tinyint или text
Цитата Vi-P:
DECLARE @S1 varchar(200)
DECLARE @S2 tinyint
DECLARE @S3 tinyint
DECLARE @S4 text

DECLARE @S5 varchar(300)
DECLARE @S6 tinyint »
, а с такими типами данных у меня (или у всех ) не проходит запись в переменную
Цитата Vi-P:
Не проходит. Натыкаюсь на:
Server: Msg 2739, Level 16, State 1, Line 1
The text, ntext, and image data types are invalid for local variables. »
У ВАС В ПРИМЕРЕ У ВСЕХ ПОЛЕЙ VARCHAR!!!

Отправлено: 13:13, 20-10-2008 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MSFT SQL Server - ошибка типа данных (tinyint и text) при записи содержимого поля в переменную

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Ошибка данных CRC при записи на Dvd-rw Sony SERGIO Оптические приводы 11 02-12-2007 08:44
Ошибка при записи DVD 1Space Программное обеспечение Linux и FreeBSD 4 26-01-2007 22:15
Предотвращение выполнения данных при запуске апплета Учетные записи пользователей WChek Microsoft Windows 2000/XP 6 16-06-2006 12:05
Ошибка при записи на стример kazarkin Общий по Linux 6 18-03-2005 17:50
Размер поля Text pauluss Вебмастеру 3 04-03-2004 22:54




 
Переход