Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум 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

 

Аватара для Delirium

Ветеран


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

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


блин, щас сделаю ваши типы и проверю....

а проблема то совершенно в другом!
http://www.sql-server-helper.com/err.../msg-2739.aspx
В этой ссылке все описано

Вот готовый код:
Код: Выделить весь код
DECLARE @S1 varchar(200)
DECLARE @S2 tinyint
DECLARE @S3 tinyint
DECLARE @S4 varchar(8000)
DECLARE @S5 varchar(300)
DECLARE @S6 tinyint

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 =  CAST([NAME4] AS VARCHAR(8000)) 
FROM Table1
WHERE nID = 2

SELECT @S5 = NAME5 
FROM Table1
WHERE nID = 2

SELECT @S6 = NAME6
FROM Table1
WHERE nID = 2

INSERT INTO Table2
(NAME1, NAME6 )
VALUES (@S1, @S6)

select * from table1

select * from table2

update table2 set name2=@S2, name3=@s3, name4=@s4,  name5=@s5  where table2.nid=(select max(nid) from table2)

select * from table2
Смысл в том, что вместо TEXT при объявлении локальных переменных, необходимо использовать либо VARCHAR(8000), либо NVARCHAR(4000), а при выборке производить CAST.

-------

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

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


Отправлено: 01:23, 21-10-2008 | #11



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

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


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


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

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


Очень интересно! Спасибо.

Отправлено: 23:19, 22-10-2008 | #12


Аватара для Delirium

Ветеран


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

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


В моем примере необходимо помнить, что данные обновляются во второй таблице в строку с максимальным nID, и чтобы случайно не обновилась другая запись(вдруг одновременно двое нажмут), необходимо все делать в пределах одной транзакции, т.е. перед началом всего запустить транзакцию, а после всех действий подтвердить.

-------

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

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


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


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


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

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


Всё работает, всё замечательно.
Но если VARCHAR(8000) недостаточно. Как установить больший размер переменной?

Отправлено: 23:41, 10-12-2008 | #14


Аватара для Delirium

Ветеран


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

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


А это в той же ссылке: A third option is to use the READTEXT, WRITETEXT and UPDATETEXT Transact-SQL statements together with the TEXTPTR function to manipulate text, ntext and image columns in a table. You can refer to Books Online regarding these Transact-SQL statements and functions for more information.

-------

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

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


Отправлено: 01:14, 11-12-2008 | #15



Компьютерный форум 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




 
Переход