DataBases

 


17 января 2020 года.

Взаимодействие с базой MSSQL через ODBC драйвер SQL Server Native Client 10.0 при использовании транспортного протокола TLS 1.2

При использовании транспортного протокола TLS 1.2 с базами MSSQL используется ODBC драйвер SQL Server Native Client 10.0

 

При получении селектом данных через ODBC по транспортному протоколу TLS 1.2, можно получить ошибку (в MSSQL Studio):

Msg 7356, Level 16, State 1, Line 1
The OLE DB provider «MSDASQL» for linked server «XXXXXXXX» supplied inconsistent metadata for a column. The column «abc» (compile-time ordinal 4) of object «<query statement> (<source_db>.<our_table>)» was reported to have a «DBCOLUMNFLAGS_ISLONG» of 128 at compile time and 0 at run time.

В прикладном приложении ошибку можно и не получить, но данные заедут некорректные. Точнее говоря в лучшем случае будут проигнорированы данные с типом varchar(MAX) . В худшем случае — просто остановится выполнение задачи в приложении.

Да, как вы уже поняли, все дело в определении типа данных varchar() в таблице и константе MSSQL MAX, которая используется в этом типе данных. Драйвер ODBC SQL Server Native Client 10.0 (и выше) не хочет понимать такой тип данных. В данном случае в нашей таблице, в колонке «abc» с типам varchar(MAX), надо указать боле точно скалярное значение максимального количества символов (это 4000), и тип данных изменить на nvarchar(4000), а точнее вместо:

abc(varchar(max), null)

должно быть:

abc(nvarchar(4000), null)


Если вносить изменения в уже имеющуюся таблицу у вас нет возможности — или вы не являетесь полноправным админом и разработчиком данного проекта, или таблица связана с другими процессами и приложениями, которые опираются на данные этой таблицы, а изменение типов с определенной долей вероятности повлечет за собой проблемы в работе других систем, то как вариант — можно создать представление (View) где будут отображаться данные из вашей таблицы «<source_db>.<our_table>», но тип вашего поля «abc» во View «<source_db>.<our_view>» нужно будет указать как abc(nvarchar(4000), null), и после этого другим системам, которые выполняли экспорт данных из вашей таблицы <our_table> посредством драйвера ODBC SQL Server Native Client 10.0, в запросе указывать уже не на таблицу, а на новую View («<source_db>.<our_view>»).

(Эта статья находится в разделе DataBases)

Хотите узнать больше? Читайте здесь >>.

Comments are closed.