Jistě nastane situace, kdy jste ve skriptech musíte zjistit aktuálně přihlášeného uživatele (definice práv, logování, parametrizace dotazů atd).
Existují dvě možnosti (vlastně víc ale nejpoužívanější jsou tyto)

1
SELECT SUSER_NAME()

 nebo

1
SELECT SUSER_SNAME()

 

Pokud oba dotazy pustíme bez argumentů vrátí to stejné - aktuálně přihlášeného uživatele. Rozdíl je v tom, že jeden dotaz zjišťuje uživatele dle UserID a druhý dle SID uživatele.
Rozdíl tedy vznikne, pokud budeme používat argumenty.

Pro zajímavost SID a userID aktuálního uživatele zjistíte takto

1
SELECT SUSER_SID(), SUSER_ID()

Určitě jste se setkali s tím, že při programování potřebujete rychle zjistit datový typ určitého sloupce tabulky. Rychlejší než procházet MSSM Studio je použít následující skript.

Pozn.v našem případě zkoumáme tabulku TabZamestnanci

1
2
3
4
5
6
USE Databaze1    --přepnutí databáze
 
SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, COLUMN_DEFAULT 
FROM information_schema.columns
WHERE table_name = 'TabZamestnanci'
ORDER BY column_name

 

Výsledek

 

Ve stávající tabulce můžeme měnit hodnoty jednotlivých sloupců (můžeme aktualizovat jeden i více sloupců najednou) přičemž můžeme modifikovat jeden i více záznamů

Aktualizace jednoho záznamu (záznam s ID = 2)

1
2
3
UPDATE NypTabZbytky 
SET IDPolozka = 2, IDDoklad = 1287355, Jakost = 'S235'
WHERE ID = 2

 

Aktualizace více záznamů najednou (v příkladu aktualizujeme všechny záznamy s datem starším než 30 dní tj.GETDATE()-30 )

1
2
3
UPDATE NypTabZbytky 
SET Poznamka = 'Starší než 30dní'
WHERE Datum < GETDATE()-30

 

Vložení záznamu do tabulky

Tímto způsobem vložíme data do tabulky, aniž bychom museli zadat hodnotu všech sloupců tabulky. Musíme definovat sloupce a jejich hodnoty, přičemž není nutné dodržet pořadí sloupců v tabulce.
Pokud tabulka používá ID pole s vlastností IDENTITY_INSERT neuvádíme hodnotu tohoto pole, systém ji automaticky přiřadí hodnotu.

1
2
INSERT INTO NypTabZbytky (Mnozstvi, Delka, Tavba, Jakost, Poznamka)
VALUES (2, 2.33, 'A542110', null, 'schválil vedoucí')

Do tabulky můžeme vložit záznam aniž bychom vyjmenovali sloupce. Je ale třeba dodržet zadat hodnoty všech sloupců a dodržet jejich pořadí v tabulce. 
Ani zde neuvádíme hodnotu pro pole s vlastností IDENTITY_INSERT

1
2
INSERT INTO NypTabZbytky 
VALUES (null, null, null, 2, 2.33, 'A542110', null, 'schválil vedoucí')

 

Do tabulky lze vložit hromadně data z jiné tabulky (popř.tabulek), je ale nutné, aby se cílová tabulka a zdrojová tabulka (nebo data) shodovali (popř.je nutné použít přetypování apod)

1
2
3
INSERT INTO TabOsoby 
SELECT * FROM TabZamestnanci
WHERE Vek < 50

Vytvoření tabulky v databázi

Pozn. příkaz IF OBJECT_ID rád používám např. v procedurách, abych ošetřil stav, kdy daná tabulka existuje

1
2
3
4
5
6
7
8
9
10
11
12
13
IF  OBJECT_ID('dbo.TabSkladPol') IS NULL	--zjištění zda tabulka neexistuje
CREATE TABLE TabSkladPol			--vytvoření tabulky 
	(
	ID		int identity(1,1),	--definice sloupců (název, vlastnosti)
	IDPolozka	int,
	IDSklad		nvarchar(30),                          
	IDDoklad	int,
	Mnozstvi	int,
	Delka		numeric(19,6),
	Tavba		nvarchar(100),
	Jakost		nvarchar(30),
	Poznamka	nvarchar(255)
	)

 

Odstranění tabulky

Pozn. smaže tabulku z databáze včetně všech dat !!!! 

1
DROP TABLE TabSkladPol

 

Přidání sloupce do tabulky

Pozn. do tabulky TabSklad přidáme sloupec NovySloupec s datovým typem nvarchar a delkou 10 znaků

1
ALTER TABLE TabSklad ADD NovySloupec nvarchar(10)

 

Odebrání sloupce z tabulky

Pozn.odstraní sloupec včetně dat !!!

1
ALTER TABLE TabSklad DROP COLUMN SloupecNaSmazani

 

Změna vlastností sloupce v tabulce

Změnu velikost u textových sloupců lze provést směrem nahoru. Pokud bychom chtěli sloupec zmenšit, je nutné nejprve všechna data v tomto sloupci "ořezat" na velikost rovnu nebo menší, než bude nová velikost sloupce. 
U číselných řetězců je to lepší. Změnu lze provést libovolně: ořezaní i zvětšení počtu desetinných míst, změna desetinného čísla na integer a naopak nebo dokonce změnu číselného sloupce na textový (číslo je přetypováno na text) ale pozor, naopak (textový sloupec na číselný) převedete pouze pokud je v textovém řetězci uložené číslo (a ani na to raději nespoléhejte)

1
ALTER TABLE TabSklad ALTER COLUMN SloupecNaZmenu nvarchar(100)

 

 

 

 

 

 

 

 

 

 

Původně to měla být kategorie o cestách, které podniknu na svém starém kole-dědkovi. Pak se mě název zalíbil a říkám si, že jednou budu taky dědek, vlastně syna už na to mám dost velkýho, a tak nadčasově tuto kategorii nechám pojmenovanou takto. Takže zde nalezneš zápisky z cest. 

Zde je můj blog o SQL. Je to takový můj tahák.

Moje poznámky z instalací