Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 20.10.2008
Сообщений: 9

Как копировать данные типа Image?

20.10.2008, 19:53. Показов 2659. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Mne nugno izmenit' znacheniya v nekotorih stolbzah tablizi , ostal'nie, v tom chisle tipa image prosto skopirovat'.
Pitayus' sdelat' eto s pomosh'yu proceduri, gde obyavlyaetesya kursor i ispol'zuetsya Insert into.
No kak bit' s image.
Probovala ispol'zovat' varbinary i TEXTPTR(),
oshibki ne vidaet, rezul'tata toge.
Chto mogno sdelat'?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.10.2008, 19:53
Ответы с готовыми решениями:

Как занести данные в поле типа IMAGE
Здравствуйте. Столкнулся с такой проблемой. Надо для Таблицы USERS (name, foto) заполнить поле foto (загрузить туда рисунок). Как это...

Как копировать часть Image в clipboard?
Как скопировать прямоугольную часть Image в clipboard? Если что не пинайте, я чайник :)

Нужно из базы MSSQLSERVER2000 вычитать поле типа Image в переменную типа Image
На C# из базы MSSQLSERVER2000 вычитать поле типа Image в переменную типа Image пишу так string mySelectQuery = 'SELECT image...

9
0 / 0 / 0
Регистрация: 13.01.2008
Сообщений: 24
20.10.2008, 22:33
В общем случае, используя курсоры, проблема решается примерно так:
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
26
27
28
29
30
31
32
33
34
35
36
CREATE PROCEDURE Example AS
 
Declare @id int, @NewID int
Declare @ptrval VARBINARY(16), @Newptrval VARBINARY(16)
 
Set nocount on
 
--Destination Table
--Create Table TempWithImg([ID] int IDENTITY, OwnerID int NULL, поля,поля,поля...,myImage image NULL)
--Source Table
--Create Table OwnersExtendedInfo([ID] int IDENTITY, OwnerID int NULL, поля,поля,поля...,BinaryContents image NULL)
 
Declare curMain CURSOR SCROLL READ_ONLY For Select [ID] from OwnersExtendedInfo
Open curMain
 
Fetch First From curMain INTO @Id
 
WHILE @@FETCH_STATUS = 0 BEGIN
   Insert Into TempWithImg(OwnerID,поля,поля,поля...,myImage) select OwnerID,поля,поля,поля...,'' from OwnersExtendedInfo where [ID] = @Id
   set @NewID = @@IDENTITY
-- Обязательно хоть что-то, кроме NULL записать в поле myImage, чтобы был валидный поинтер... 
   SELECT @Newptrval = TEXTPTR(myImage) from TempWithImg where [ID] = @NewID 
   SELECT @ptrval = TEXTPTR(BinaryContents) from OwnersExtendedInfo where [ID] = @Id
 
   if TEXTVALID('OwnersExtendedInfo.BinaryContents', @ptrval) = 1 and TEXTVALID('TempWithImg.myImage', @Newptrval) = 1
      UPDATETEXT TempWithImg.myImage @Newptrval 0 NULL OwnersExtendedInfo.BinaryContents @ptrval
 
   Fetch Next From curMain INTO @Id
END
 
CLOSE curMain
DEALLOCATE curMain
 
Set nocount off
Return 0
GO
Проверено в SQL2000 - работает.
0
0 / 0 / 0
Регистрация: 20.10.2008
Сообщений: 9
20.10.2008, 23:45  [ТС]
Spasibo, poprobuyu
0
0 / 0 / 0
Регистрация: 20.10.2008
Сообщений: 9
21.10.2008, 12:23  [ТС]
Если мoжнo еше вoпрoс. Мoи дaнные image рaзмерa примернo 23000 Byte. Не урежет ли их TEXTPTR()
0
0 / 0 / 0
Регистрация: 13.01.2008
Сообщений: 24
21.10.2008, 13:03
TEXTPTR никогда ничего не обрежет - это просто указатель.

можешь подстраховать себя

T-SQL
1
2
3
4
5
6
7
8
Declare @TextSize int
 
Set @TextSize = @@TEXTSIZE -- по умолчанию 4 KB
Set @@TEXTSIZE = 2147483647 -- это максимум 2 GB.
 
-- тут твои действия по копированию image-данных
 
Set @@TEXTSIZE = @TextSize
p.s. хотя на работу UPDATETEXT установка @@TEXTSIZE не влияет
0
0 / 0 / 0
Регистрация: 13.01.2008
Сообщений: 24
21.10.2008, 13:11
чуть не забыл.
1)
правильно будет
SET TEXTSIZE = 2147483647 и Set TEXTSIZE = @TextSize
2)
установив @@TEXTSIZE достаточно большим (в твоем случае достаточно и 64 КВ) можно использовать простой SELECT для выборки данных из image-полей и UPDATE/INSERT для записи
проверить можешь даже в Query Analyzer

SET TEXTSIZE = 100000
select imageField from ...
0
Delta
21.10.2008, 22:55
Можно маленькую реплику (здорово ты код написал),

в SQL 7.0 пробовал вставлять (или update) Null в image-колонку - без проблем и при этом textptr валидный становится.

Может, делал что-то не так ?
0 / 0 / 0
Регистрация: 20.10.2008
Сообщений: 9
21.10.2008, 23:51  [ТС]
A у меня нет, пoкa не нaписaлa кaкoе-тo знaчение , хoтя пo умoлчaнию был NULL Идея с
Update ....0 null..... здoрoвo пoмoглa.
Спaсибo
0
Delta
22.10.2008, 10:53
Так я и имел ввиду явный update значения Null! Тогда textptr валидным становится.
0 / 0 / 0
Регистрация: 13.01.2008
Сообщений: 24
22.10.2008, 16:10
2Delta: в MSSQL 7 - да, в MSSQL 2000 - нет/не всегда

на всякий случай
Books Online SQL 2000 'Managing ntext, text, and image Data' :
0) Зависит от
состояние опции 'text in row' ( см. процедуру sp_tableoption )
1)
In Microsoft SQL Server™ 2000, for tables with in row text, TEXTPTR returns a handle for the text to be processed. You can obtain a valid text pointer even if the text value is null.

If the table does not have in row text, and if a text, ntext, or image column has not been initialized by an UPDATETEXT statement, TEXTPTR returns a null pointer.
2)
NULL text
You can get an in row text pointer on NULL text that is generated by INSERT. Previously, you can get text pointers only after updating a BLOB to NULL.

For example, the following code does not work in SQL Server 7.0, but works in SQL Server 2000.
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
---CREATE TABLE t1 (c1 int, c2 text)
 
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
GO
INSERT INTO t1 VALUES (4, NULL)
BEGIN TRAN
DECLARE @ptrval VARBINARY(16)
SELECT @ptrval = TEXTPTR(c2)
FROM t1
WHERE c1 = 4
WRITETEXT t1.c2 @ptrval 'x4'
COMMIT
In SQL Server 7.0, you must do the following:
T-SQL
1
2
3
4
5
6
7
8
9
INSERT INTO t1 VALUES (4, NULL)
UPDATE t1 
    SET c2 = NULL 
    WHERE c1 = 4
DECLARE @ptrval VARBINARY(16)
SELECT @ptrval = TEXTPTR(c2)
FROM t1
WHERE c1 = 4
WRITETEXT t1.c2 @ptrval 'x4'
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.10.2008, 16:10
Помогаю со студенческими работами здесь

Как копировать данные в таблицу порционно?
Условно говоря, у меня есть таблица, где имеется 2,5 млн записей. Как мне эти записи копировать в цикле по частям? Например, по 50 тысяч за...

Копировать часть Image
Как скопировать, часть Image Нужно копировать зная координаты 4 точек, например a(0;30), b (100; 50), c(60;80), d(200,120)

Как ежедневно копировать данные в предыдущий столбец?
На одном листе в столбец G данные попадают автоматически.Каждый день они меняются.Как сделать ,что бы данные с столбца G автоматически...

Как копировать данные из формы VB в файл Excel
Здравствуйте! Подскажите пожалуйста как можно связать форму VB с файлом excel чтобы текст из определенных Текстовых полей и списков формы...

Как копировать данные из одной базы в другую
Всем привет. Нужна помощь есть база телефонный справочник (BD1) в нем данные о всех сотрудниках с фотографиями. И есть другая база по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru