Windows - SQL szerver tippek, trükkök

forráskód letöltése
Mostani cikkünkben néhány SQL szerverrel kapcsolatos tippet adunk közre. Példát láthatunk olyan lekérdezésre, amelyben a sorok egy oszlopban, vesszővel elválasztva jelennek meg, láthatunk mintát adatbázisfájlok információinak lekérdezésére, valamint tömörített adatmentésre.
Több sor tartalmának megjelenítése felsorolva egy mezőben
Előfordulhat, hogy egy tábla soraiból egy vesszővel elválasztott listát kell képeznünk. Ahhoz, hogy ezt a feladatot az SQL szerver segítségével megoldjuk, függvényt kell készítenünk. A függvény a megadott paraméter segítségével egy lekérdezést futtat, és az eredményeket egy sztring változóba helyezi el. A függvény visszaadott értéke ez a változó lesz, amelyben szerepelni fognak a lekérdezett sorok, vesszővel elválasztva.
CREATE FUNCTION Listakepzes (@utca varchar(50))
RETURNS varchar(2000) AS
BEGIN
DECLARE @rVal varchar(2000)
A függvény deklarálása. A @utca a bemenő paraméter, amely a lekérdezés WHERE feltételének paramétere lesz, a visszaadott érték 2000 karakteres sztring lesz, és deklarálunk egy @rVal változót, ugyanazon típussal.
SET @rVal = ''
SELECT @rVal = @rVal + ',' + CONVERT (varchar, TablaID)
FROM Szemelyek
WHERE Utca LIKE @utca
A lekérdezés egy lakcímeket tartalmazó táblából veszi az azonos utcában lakók azonosítóit, és összegyűjti azokat a @rVal változóba.
IF LEN(@rVal)>0
BEGIN
SET @rVal = SUBSTRING(@rVal, 2, LEN(@rVal)-1)
END
Az elkészült lista elejéről levágjuk a vesszőt.
RETURN @rVal
END
Végül visszaadjuk az eredményt és lezárjuk a függvényt.
SELECT utcanev, Listakepzes(utcanev)
FROM Utcak
Példa a függvény használatára. A lekérdezés az Utcak táblában található valamennyi utcához megjelenít egy azonosító-listát a lakosokról.
Információk lekérdezése az adatbázisfájlokról
Az alábbi script segítségével az SQL szerverben megtalálható adatbázisokról tudunk információkat lekérdezni:
DECLARE @dbname varchar(50)
DECLARE @command varchar(255)
DECLARE dbname_cursor CURSOR FOR SELECT name from master..sysdatabases 
where name not in ('northwind', 'pubs')
Létrehozunk egy kurzort, amellyel a northwind és a pubs adatbázist kivéve lekérdezzük a rendszerben található adatbázisok neveit.
OPEN dbname_cursor
FETCH next FROM dbname_cursor into @dbname
WHILE @@fetch_status = 0
BEGIN
SELECT @command = 'USE ' + @dbname + ' select ' + 
'convert(varchar(25),f.name) ''Meghajtó név'','+ 
'convert(varchar(10),size/128) + '' MB'' ''Méret'','+ 
'convert(varchar(100),f.filename) Path,'+ 
'convert(varchar(15),filegroup_name(groupid)) Filegroup from sysfiles f' 
EXEC (@command)
FETCH NEXT FROM dbname_cursor INTO @dbname
END
A kurzor sorain végighaladva lekérdezzük az adatbázisnevekhez tartozó meghajtó név, méret, elérési út és fájlcsoport információkat.
CLOSE dbname_cursor
DEALLOCATE dbname_cursor
GO
Lezárjuk a kurzort, és felszabadítjuk a memóriát.
Tömörített mentés készítése Windows 2000 alatt
Ha mentést készítünk az SQL szerver adatállományairól, akkor tömörítésre csak valamilyen harmadik fél által készített szoftver segítségével van lehetőségünk. Van azonban egy másik módszer is, amely az operációs rendszer szolgáltatása, és könnyebb a kezelése is.
  • Hozzunk létre egy mappát a mentéseknek, pl. E:\backup.
  • Nyissuk meg a mappa tulajdonságlapját jobb egérgombbal kattintva rajta, és a Tulajdonságokat választva.
  • Kattintsunk a speciális gombra az attribútumoknál, és jelöljük be a Tartalom tömörítése helymegtakarítás végett kapcsolót, és A mappa archiválásra kész kapcsolót.

  • Ha a mappa alatt újabb mappák is megtalálhatók, akkor a rendszer rákérdez, hogy azokat is tömörítse-e. Érdemes előzőleg új mappát létrehozni az E:\backup alá, így kiválaszthatjuk a Módosítások alkalmazása erre a mappára, az almappákra és a fájlokra opciót.
  • Állítsuk be az SQL szerverben a mentést a most létrehozott könyvtárba. Az első mentés után már ellenőrizhetjük is, hogy az adott fájl mennyi helyet foglal el a lemezen a fájl méretéhez képest a fájl tulajdonságlapján.