Dynamiczna budowa kodu a znak ‚

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
 

DBBS