C# - MS SQL tárolt eljárások

MS SQL tárolt eljárások 16. rész

forráskód letöltése
A Microsoft SQL tárolt eljárásairól szóló cikksorozat 16. részében két olyan tárolt eljárást ismertetünk, amelyek közül az egyik a sztringek összeállítását, a másik pedig a szétbontását teszi lehetővé. Az első tárolt eljárás egy minta sztring, és paraméterek segítségével képes összeállítani egy új sztringet. A másik eljárás egy különböző paramétereket tartalmazó sztringet tud szétbontani egy megadott minta alapján úgy, hogy a paraméterek értékét egy-egy változóba másolja át.
xp_sprintf.sql: Sztring összeállítása paraméterekből
Az első tárolt eljárás amiről beszélünk az sp_sprintf. Ez az eljárás egy minta sztringből, és tetszőleges számú paraméterből képes összeállítani egy sztringet, amelybe az adott helyekre beszúrja a paramétereket. Az eljárás leginkább a Delphi format, vagy a C nyelvben használt sprintf függvényekhez hasonlítható. Az eljárás szintaxisa a következő:
xp_sprintf {string OUTPUT, format} [, argument [,...n]]
Az eljárás paraméterei a következők:
string
Ebben a paraméterben kell megadnunk azt a varchar típusú változót, amibe az eredmény sztringet várjuk.
format
Ez a paraméter tartalmazza a formátum sztringet. A formátum sztring speciális karaktereket tartalmazhat, amelyek helyére az argument paraméterek kerülnek beillesztésre. Az eljárás egyelőre csak a %s kódot támogatja, amelynek helyére sztringet tud beilleszteni. Az első előforduló %s helyére az első argumentum kerül, a második helyére a második argumentum, és így tovább. A formátum sztringnek annyi %s kódot kell tartalmaznia, amennyi beillesztendő argumentumot megadunk. Ha ezeknek eltérő a számuk, akkor sem kapunk hibaüzenetet. Ha a %s kódok száma több mint az argumentumok száma, akkor egyszerűen törli ezeket a sztringből. Ellenkező esetben azok az argumentumok kimaradnak, amelyekhez nem tartozik %s kód. Ha nem adunk meg egyetlen argumentumot sem, akkor NULL sztringet kapunk eredményül.
argument
Ebben a paraméterben adhatjuk meg a sztringbe illesztendő argumentumokat. Tetszőleges számú argumentumot megadhatunk, egymástól vesszővel elválasztva.
use Master;
declare @str varchar(256);
declare @year as varchar(4);
declare @month as varchar(2);
declare @day as varchar(2);
set @year=CAST(YEAR(GetDate()) as varchar(4));
set @month=CAST(MONTH(GetDate()) as varchar(2));
set @day=CAST(DAY(GetDate()) as varchar(2));
exec xp_sprintf @str output, '%s. év %s. hónap %s. nap', @year, @month, @day
select @str;
xp_sscanf.sql: Sztring szétbontása egy formátum sztring alapján.
Ez az eljárás az xp_scanf, az xp_sprintf eljárás fordítottja. Ezzel az eljárással könnyedén kiolvashatunk paramétereket egy paraméter sztringből.
Az eljárás szintaxisa a következő:
xp_sscanf {string OUTPUT, format} [, argument [,...n]]
Az eljárás paraméterei:
string
Ebben a paraméterben kell megadni azt a paramétereket tartalmazó sztringet, vagy varchar típusú változót. A függvény a C nyelvben is használt sscanf függvény megfelelője, de csak a %s kódot támogatja.
format
Ebben a paraméterben kell megadnunk azt a formátum sztringet, ami alapján a string paraméter értékét feldolgozza. Értéke annyiban különbözik a string paraméter értékétől, hogy a paraméterek értékeinek helyén %s karakterek állnak.
argument
Ebben a paraméterben adhatjuk meg azokat a varchar típusú változókat, amelyekbe a paraméterek értékeit várjuk. Tetszőleges számú változó megadható egymás után vesszővel elválasztva.
use Master;
declare
  @year varchar(20),
  @month varchar(20),
  @day varchar(20),
  @source varchar(256);
set @source = 'date -y2000 -m01 -d12';
exec xp_sscanf @source, 'date -y%s -m%s -d%s',
   @year output, @month output, @day output
select @source as Forras, @year as Ev, @month as Honap, @day as Nap;

MS SQL tárolt eljárások cikksorozat