Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DTS портит данные типа sql_variant [D5, MSSQL]


BPK ©   (2004-05-13 09:53:00) 

У меня в одной из колонок таблицы содержатся данные типа sql_variant, поскольку данные должны быть разного типа.
Всё бы ничего, но после копирования таблиц с отладочного сервера на рабочий при помощи DTS, вместо правильных данных в этом столбце возникает мусор.
Как бороться?


sniknik   (2004-05-24 11:22:00) [1]

странно, у меня пробы не дали отрицательных результатов, хотя для работы вариант не использую, всегда точно знаю типы полей :).
и кстати когда пробовал ([8]) использувал базу на недавно установленной машине без апдейтов (MDAC 2.5, максимум 2.6) а у меня 2,7. и тем не менее нормально.

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


Nikolay M.   (2004-05-24 11:04:00) [2]


> Проблемы:
> - sql_variant зависит от версии MDAC

Ы? Интересно.
Если не трудно, плз, как именно зависит и в чем траблы, чтобы не наступать потом на те же грабли.


Nikolay M.   (2004-05-24 11:01:00) [3]


> Проблемы:
> - sql_variant зависит от версии MDAC

Ы? Интересно.
Если не трудно, плз, как именно зависит и в чем траблы, чтобы не наступать потом на те же грабли.


BPK   (2004-05-24 10:02:00) [4]

Короче говоря, я отказался от sql_variant. Перешёл на nvarchar. С ним гораздо меньше проблем.

Проблемы:
- sql_variant зависит от версии MDAC
- если в таблице имеется хотя бы одно поле sql_variant, то Enterprise Manager не даёт отредактировать ни одну ячейку ни одного поля
- При копировании с помощью DTS данные теряются

Я думаю, этого достаточно, чтобы признать тип sql_variant непригодным к употреблению.


BPK   (2004-05-18 10:22:00) [5]

Refresh


BPK   (2004-05-17 10:45:00) [6]

Выяснилось, что после репликации возникает та же фигня.


Nikolay M.   (2004-05-14 13:15:00) [7]


> Выдержка из документации (специалоно для Nikolay M. ©):

А в [11] типы мне не иначе как звезды подсказали.


> Где посмотреть?

Если BOL-ом умеешь пользоваться, зачем спрашиваешь?
Но СПЕЦИАЛЬНО для тебя, например так: в ЕМ посмотреть для базы Generate SQL Script Preview.


BPK   (2004-05-14 13:00:00) [8]

>А настройки серверов одинаковы в плане COLLATION-ов?

Где посмотреть?


BPK   (2004-05-14 12:59:00) [9]

Выдержка из документации (специалоно для Nikolay M. ©):

The only types of values that cannot be stored using sql_variant are text, ntext, image, timestamp, and sql_variant.

Раз в доке так написано, то я и не пытался пихать такие данные в sql_variant.
В cast использую int,float,money,nvarchar,datetime,bit.
Пока реально использовал только int,float,nvarchar.


Nikolay M.   (2004-05-14 12:39:00) [10]

А настройки серверов одинаковы в плане COLLATION-ов?
text, ntext, image, timestamp, часом, в тестовую базу не пихались?


BPK   (2004-05-14 12:34:00) [11]

Причём заметь, что первые два значения - текст, затем - целое число и т.д. Т.е. типы разные.


BPK   (2004-05-14 12:31:00) [12]

>если базу надо перенести всю

Только несколько таблиц

>что содержал что получилось?

================================
Было
================================
К155ЛА3
К155ЛА3
3
NULL
0
2
0
КР1518ВЕ1-004
КР1518ВЕ1
200
45
-1
3
4
-1
55
Эксперимент
Большоооой эксперимент
25
3
0
0
48
К50-16
К50-16
5
0.44
6
2

0

================================
Стало
================================
\x1A\x41
\x1A\x41
\x3
NULL

\x2

\x1A\x4 \x41
\x1A\x4 \x41

яяяя
\x3
\x4
яяяя

-\x4:\x4A\x4?\x45\x4@\x48\x4<\x45\x4=\x4B\x4
\x11\x4>\x4;\x4L\x4H\x4>\x4>\x4>\x4>\x49\x4

\x3

\x1A\x45
\x1A\x45
\x5
)\ЏВх(Ь?
\x6
\x2


sniknik   (2004-05-14 10:47:00) [13]

вот именно так и думал... все отработало без ошибок, поле sql_varian значения для теста /10(числом), и строки "Test Str", "Test Русский".

> А данные такие:
это не то. что содержал что получилось? если был русский текст то какой язык установлен у сервера у юзера. с какими параметрами перенос. в общем нужно то что помогло бы сравнить и сэмулировать глюк.

а вообще, действительно если базу надо перенести всю то > Nikolay M. ©   (14.05.04 09:50) [5]


BPK   (2004-05-14 09:57:00) [14]

P.S. В понедельник посмотрим, что будет с БД после автоматического копирования на другой сервер.


BPK   (2004-05-14 09:55:00) [15]

Помог такой запрос:

update mt1 set mt1.val=mt2.val
from Таблица as mt1
inner join OPENDATASOURCE('SQLOLEDB','Data Source=Сервер;User ID=Узер;Password=Пароль').База.dbo.Таблица as mt2
on mt1.[id]=mt2.[id]


Nikolay M.   (2004-05-14 09:50:00) [16]


> BPK   (14.05.04 09:42) [3]

Detach ее на рабочем, потом Attach на рабочем.


bushmen   (2004-05-14 09:45:00) [17]

2BPK:
А на http://www.sql.ruбыл?


BPK   (2004-05-14 09:42:00) [18]

>OPENDATASOURCE...
Спасибо, всё ОК.

>чтобы проверить нужно больше данных (а то не исключено что у
>меня все будет нормально

А данные такие:
имеется корпоративный MSSQL-сервер плюс MSDE на локальной машине.
Я формировал структуру и отлаживал БД на MSDE, а затем, как обычно, решил перенести её на рабочий сервер с помощью Data Transformation Services. Всё прошло нормально, за исключением одного - тот столбец, который хранит данные sql_variant, содержит мусор.

То же самое происходит и при локальном копировании в пределах одного SQL-сервера.

Я попробовал дома - та же петрушка. Что интересно: нигде во всём Интернете я не нашёл ни одного упоминания о данной проблеме.


sniknik   (2004-05-14 08:43:00) [19]

по основному вопросу надо пробовать но неохота и серверов много дома нет ... может на работе если время будет.
кстати чтобы проверить нужно больше данных (а то не исключено что у меня все будет нормально)

> Может быть кто-нибудь из вас подскажет, как использовать в T-SQL-запросе две таблицы из двух баз данных на двух разных СЕРВЕРАХ?

Bol.Examples
This example accesses data from a table on another instance of SQL Server.

SELECT   *
FROM      OPENDATASOURCE(
        'SQLOLEDB',
        'Data Source=ServerName;User ID=MyUID;Password=MyPass'
        ).Northwind.dbo.Categories


BPK   (2004-05-13 23:27:00) [20]

Дополнение:

При применении запроса типа

update mt1 set mt1.value=mt2.value
from bd1..mytable mt1
inner join bd2..mytable mt2 on mt1.[id]=mt2.[id]

Данные в поле value (sql_variant) базы данных bd1 восстанавливаются, но это происходит в пределах одного сервера, а мне нужно скопировать на другой.
Есть идеи?
Может быть кто-нибудь из вас подскажет, как использовать в T-SQL-запросе две таблицы из двух баз данных на двух разных СЕРВЕРАХ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо