Budując kod T-SQL dynamicznie wielokrotnie można spotkać się z problemem znaku ’.
Np. mając do dyspozycji fragment kodu z „Jak podłączyć bazy typu dbf (dBase) do MS SQL Server ?”
SELECT Pole_1, Pole_2, ..., Pole_n FROM OPENROWSET('MSDASQL','Driver={Microsoft dBASE Driver (*.dbf)};DBQ=C:\Temp','SELECT * FROM BazaDBF')
chcąc np. dynamicznie zmieniać ścieżkę C:\Temp należało by w zmiennej tekstowej użyć znaku ’, ale przecież znak ten rozpoczyna i kończy ciąg tekstowy.
Należy zastosować funkcję char(), która zwraca znak o odpowiednim numerze. I Tak nasz znak ’ to char(39).
declare @cmd varchar(500); declare @pp varchar(20); set @pp='C:\Temp' set @cmd = 'INSERT INTO Baza (POLE_1, POLE_2, POLE_3) SELECT POLE_1, POLE_2, POLE_3 FROM OPENROWSET('+<strong>CHAR(39)</strong>+'MSDASQL'+<strong>CHAR(39)</strong>+','+ <strong>CHAR(39)</strong>+'Driver={Microsoft dBASE Driver (*.dbf)};DBQ='+@pp+<strong>CHAR(39)</strong>+','+ <strong>CHAR(39)</strong>+'SELECT * FROM BazaDBF'+<strong>CHAR(39)</strong>+')' exec sys.sp_sqlexec @cmd
3 komentarze
roku · 11 września 2010 o 13:24
nieczytelne, uzycie 2x apostrof „maskuje” go i nie jest interpretowane jako koniec stringu
FROM OPENROWSET(’MSDASQL”,”Driver={Microsoft dBASE Driver (*.dbf)};DBQ=’+@pp+”’,”SELECT * FROM BazaDBF”)’
roku · 11 września 2010 o 13:28
mozna tez zmienic
SET QUOTED_IDENTIFIER ON;
Dariusz Brejnak · 11 września 2010 o 13:33
Tak, użycie 2 apostrofów jest szybsze i prostsze, ale czasem w bardzo długim kodzie, gdzie był budowany skrypt i ilość apostrofów gwałtownie wzrosła wymyśliłem ten sposób. Dzięki temu mogłem szybko odróżnić apostrofy kodu od apostrofów budowanego skryptu. Jak widać wszystko można budować na wiele sposobów. Kwestia przyzwyczajenia. To tak samo jak z char(10), char(13)
Pozdrawiam
Możliwość komentowania została wyłączona.