Wpis z mikrobloga

#mssql #sql #programowanie #bazydanych

Mam problem z replikacją.

Muszę ustawić publikację z aktualizacjami za pomocą stored procedures a nie generowanych sql ponieważ gdzieś po drodze psuje polskie znaki.

Kiedy robię ręcznie update (mssql => postgre za pomocą PGNP) polskie znaki normalnie idą, w logach provider dostaje query z już zepsutym kodowaniem, więc próbuję przestawić replikacje na stored procedures.

Problem w tym że potrzebuje mieć ustawioną publikację żeby akceptowała heterogeniczne subskrypcje, a przestawienie tej opcji już po utworzeniu aplikacji resetuje schemaoption i updcmd publikacji (na dynamiczne query o którym wyżej pisałem)

Robił ktoś coś takiego ? (na priva więcej informacji mogę wysłać, tu nie ma sensu pakować ;) )

mssql server 2005
  • 6
@ihwar: Ciekawy kejs. Spróbuj do rozwalającej się kolumny dodać COLLATE.

Jeżeli jednak zapytanie wykonywane z palca działa ok, mogą to być np. jakieś różnice w userze (nie pamiętam czy takie są - dawno nie administrowałem ssms i nie powiem w jakim userze, czy tym, na którym działa agent , czy bazodanowym.)

Jeśli ładujesz przez SSIS masz tam kontener convert - możesz użyć też jego.
@RomantycznyRoman: nie używam SSIS wszystko procedurami odpalam bo tylko tak da sie podłączyć do tego providera, nie bardzo wiem gdzie mógłbym dodać Collate, dodawanie artykułów publikacji nie ma takiej opcji niestety, ale będę to jeszcze sprawdzał.

Bardzo ciekawa uwaga na temat usera, publikacja odpalana jest przez sql server agent więc faktycznie może korzystać z jakichś standardowych ustawień językowych, pierwsze co zrobie jutro rano w pracy to to sprawdzę :)
@RomantycznyRoman: niestety, ani to ani to nie zadziałało zamiast polskich znaków mam "testowy wpis ╣ťŠč"

przez providera przechodzą polskie znaki, ale publikacja źle wywołuje kod (w logach providera widać że już jest zepsute kodowanie parametrach update'a)
@ihwar: Na sucho, bez dostępu do profilera i samego ssms będzie ciężko. Ale można spróbować.

Rozpiszę - mssqla masz składanego dynamicznie, jednak przy próbie odpalenia go w postgre, okazuje się, że wygenerowany skrypt ma złe kodowanie - tak?

1. Jak wygląda komunikacja między ssms, a postgre?

2. Czy tę swoją dynamiczną procedurę wywołujesz przez postgre, czy np. przez openquery i linked server?
@RomantycznyRoman:

mam linked serwer pomiędzy mssql2005 a postre (za pomocą providera pgnp http://www.pgoledb.com/)

ustawiam replikacje kolejno za pomocą procedur:

spreplicationdboption

sp
addpublication

spaddpublicationsnapshot

spaddarticle

sp
changepublication

spaddsubscription

sp
changesubscription

to tworzy replikacje z article który upd cmd, ins cmd i del cmd ma robione dynamicznie - jest inna opcja samemu napisać procedury do updateów ale nie chce mi to działać - wyrzuca błąd że tabela sp-MSupd-mojaProcedura