Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не вставляет данные в image-поле  [new]
MasterOfCode
Member

Откуда:
Сообщений: 63
Функция:
SELECT [MyDB].[dbo].[GetDataFromOtherDB] (7344153)

Возвращает нормальное значение (не null).
при выполнении:
insert into table_name (image_field)
select [MyDB].[dbo].[GetDataFromOtherDB] (7344153)

выдает ошибку:
автор
Cannot insert the value NULL into column image_field

В чем может быть проблема, с учетом того, что на другом аналогичном сервере данный скрипт выполняется?

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (X64) Apr 22 2011 19:23:43 Copyright (c) Microsoft Corporation Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
21 май 13, 13:10    [14326305]     Ответить | Цитировать Сообщить модератору
 Re: Не вставляет данные в image-поле  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
MasterOfCode
В чем может быть проблема, с учетом того, что на другом аналогичном сервере данный скрипт выполняется?

ну как минимум наверное на другом сервер поле image_field может содержать NULL
Да и ваша-фция,наврено возращает больше 1-го значения
21 май 13, 13:51    [14326568]     Ответить | Цитировать Сообщить модератору
 Re: Не вставляет данные в image-поле  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Maxx
Да и ваша-фция,наврено возращает больше 1-го значения

Скалярная функция — больше одного значения? :)
21 май 13, 13:56    [14326622]     Ответить | Цитировать Сообщить модератору
 Re: Не вставляет данные в image-поле  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Гость333
Maxx
Да и ваша-фция,наврено возращает больше 1-го значения

Скалярная функция — больше одного значения? :)

Ну да вообщем довольно сложно реализовать:)
21 май 13, 14:04    [14326698]     Ответить | Цитировать Сообщить модератору
 Re: Не вставляет данные в image-поле  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
ну и до кучи
автор
scalar_return_data_type

Is the return value of a scalar user-defined function. scalar_return_data_type can be any of the scalar data types supported by SQL Server, except text, ntext, image, and timestamp.

И
автор
table_name (image_field)

Какого таки типа image_field ?
21 май 13, 14:06    [14326713]     Ответить | Цитировать Сообщить модератору
 Re: Не вставляет данные в image-поле  [new]
MasterOfCode
Member

Откуда:
Сообщений: 63
Maxx,

image, not null.
Вся таблица состоит только из одного поля image_field image not null
21 май 13, 14:23    [14326852]     Ответить | Цитировать Сообщить модератору
 Re: Не вставляет данные в image-поле  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
тело ф-ции покажите
21 май 13, 14:29    [14326902]     Ответить | Цитировать Сообщить модератору
 Re: Не вставляет данные в image-поле  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
MasterOfCode
image, not null.
Вся таблица состоит только из одного поля image_field image not null

Ой... А как вы что-нить в ней собираетесь искать? Или у вас...
21 май 13, 14:41    [14327006]     Ответить | Цитировать Сообщить модератору
 Re: Не вставляет данные в image-поле  [new]
MasterOfCode
Member

Откуда:
Сообщений: 63
Проблема решена. Проблема была с коннектом к БД Oracle в теле функции. Не хватало драйверов (DTS) на сервере, где установлен MS SQL
Всем спасибо
21 май 13, 15:26    [14327416]     Ответить | Цитировать Сообщить модератору
 Re: Не вставляет данные в image-поле  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
MasterOfCode
Функция:
SELECT [MyDB].[dbo].[GetDataFromOtherDB] (7344153)

Возвращает нормальное значение (не null).


А как же оно у вас работало ?????
21 май 13, 15:30    [14327464]     Ответить | Цитировать Сообщить модератору
 Re: Не вставляет данные в image-поле  [new]
MasterOfCode
Member

Откуда:
Сообщений: 63
Maxx
MasterOfCode
Функция:
SELECT [MyDB].[dbo].[GetDataFromOtherDB] (7344153)

Возвращает нормальное значение (не null).


А как же оно у вас работало ?????

Сами тут все в небольшом шоке. Почему-то если просто вызываешь функцию коннект проходил и запрос к оракловой бд выполнялся. Но в случаи попытки вставке сваливался по ошибке.
22 май 13, 06:36    [14330233]     Ответить | Цитировать Сообщить модератору
 Re: Не вставляет данные в image-поле  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31823
MasterOfCode
Maxx
пропущено...


А как же оно у вас работало ?????

Сами тут все в небольшом шоке. Почему-то если просто вызываешь функцию коннект проходил и запрос к оракловой бд выполнялся. Но в случаи попытки вставке сваливался по ошибке.
Отличается контекст выполнения функции. При вызове insert ... select ... функция вызывается в транзакции.
22 май 13, 09:01    [14330528]     Ответить | Цитировать Сообщить модератору
 Re: Не вставляет данные в image-поле  [new]
MasterOfCode
Member

Откуда:
Сообщений: 63
alexeyvg
MasterOfCode
пропущено...

Сами тут все в небольшом шоке. Почему-то если просто вызываешь функцию коннект проходил и запрос к оракловой бд выполнялся. Но в случаи попытки вставке сваливался по ошибке.
Отличается контекст выполнения функции. При вызове insert ... select ... функция вызывается в транзакции.

А можно поподробнее? Где об этом можно прочитать?
22 май 13, 15:06    [14333440]     Ответить | Цитировать Сообщить модератору
 Re: Не вставляет данные в image-поле  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31823
MasterOfCode
alexeyvg
пропущено...
Отличается контекст выполнения функции. При вызове insert ... select ... функция вызывается в транзакции.

А можно поподробнее? Где об этом можно прочитать?
Ну это из опыта, не могу подсказать, где почитать. Наверное, в BOL где то есть... Я на это постоянно натыкаюсь при использовании линкед-серверов, проблемы с распределёнными транзакциями (с 2008 к счастью появилась опция их игнорирования)

Вот пример:

use tempdb
go
create function dbo.test_f()
returns int
as
begin
return @@trancount
end
go
declare @t table(i int)
create table #t(i int)

select dbo.test_f()
insert @t(i)select dbo.test_f()
insert #t(i)select dbo.test_f()
select * from @t
select * from #t
go
drop function dbo.test_f
drop table #t

Результат
0
0
2
Обратите внимание, что при вставке в таблицу-переменную функция вызывается вне транзакции, а при вставке в временную таблицу - в транзакции.

Попробуйте использовать таблицу-переменную, если возможно.
22 май 13, 20:05    [14335372]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить