|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MSFT SQL Server - ошибка типа данных (tinyint и text) при записи содержимого поля в переменную |
|
|
MSFT SQL Server - ошибка типа данных (tinyint и text) при записи содержимого поля в переменную
|
Пользователь Сообщения: 101 |
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать для text и tinyint размерность не указывают
|
Отправлено: 16:02, 11-10-2008 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 101
|
Профиль | Отправить PM | Цитировать Спасибо. В понедельник попробую применить.
|
Отправлено: 20:40, 11-10-2008 | #3 |
Пользователь Сообщения: 101
|
Профиль | Отправить PM | Цитировать В целом не получается. Т.е. действительно если не указывать размерность, то эта ошибка убирается. Но только для того что бы уступить место уведомлению, что ПОЛЯ С ТАКИМ ТИПОМ ДАННЫХ В ПЕРЕМЕННУЮ ЗАПИСАТЬ НЕЛЬЗЯ.
Отсюда вопрос, а как тогда можно скопировать ячейку из одной таблицы в ячейку другой? Т.е. строка уже там существует и надо просто заменить содержимое ячейки. UPDATE не работает с именами ячеек, только '...' | DEFAULT | NULL. INSERT создаёт новую строчку. Подскажите решение. |
Отправлено: 18:41, 13-10-2008 | #4 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Цитата Vi-P:
Желателен полный текст скрипта и пример данных и желаемый результат, тогда видно будет, что делать. update table set @s2 = 'number' where s2=NUM ? |
||
------- Отправлено: 08:44, 17-10-2008 | #5 |
Пользователь Сообщения: 101
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать |
Отправлено: 19:51, 17-10-2008 | #7 |
Пользователь Сообщения: 101
|
Профиль | Отправить PM | Цитировать Слушайте, читайте внимательней. УСЛОВИЕ КОПИРОВАНИЯ СЛЕДУЮЩЕЕ -
Цитата Vi-P:
|
|
Отправлено: 22:10, 18-10-2008 | #8 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Vi-P, у меня такое предложение:
Т.к. все делается в одной транзакции, то можно сделать так: Открыть транзакцию, написать Цитата Vi-P:
Цитата Vi-P:
Накидал вот такой код, попробуйте немного видоизменить и применить: 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 при последнем просмотре видим: Подойдет вам такое решение? |
||
------- Отправлено: 02:46, 20-10-2008 | #9 |
Пользователь Сообщения: 101
|
Профиль | Отправить PM | Цитировать Хм.... НЕ ПОДОЙДЁТ!!!!!!! (т.е. конечно всё равно спасибо, но...)
У меня несколько полей, а именно NAME2 NAME3 NAME4 NAME6 с типом tinyint или text Цитата Vi-P:
Цитата Vi-P:
|
||
Отправлено: 13:13, 20-10-2008 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Ошибка данных 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 |
|