Archiv pro rubriku: SSMS

Vyhledání procedur obsahujících nějaké slovo

Dneska tu mám rychlovku. Jak najít objekty (procedury, funkce, triggery), které obsahují nějaké slovo (zpravidla nějaký název tabulky). Já na to používám tohle:

SELECT DISTINCT OBJECT_NAME(id)
FROM  sys.syscomments s
WHERE s.text LIKE '%tabul%'

A jak to spustit nad více databázemi najednou? Třeba pomocí registrovaných serverů. Tam si vytvoříme Server Group (1Produkce), pod ní přidáme servery i s konkrétní databází (AssemblyTest, skoleni). A pak nad server group pravá myš a New Query. V management studiu se otevře okno, jehož obsah se pak spustí proti všem serverům/databázím ze skupiny.
vyhledani

Jak vyskriptovat data z tabulky

Pomocí wizardu

Pro jednorázové akce je nejjednodušší si to vyklikat ve wizardu. V Object Exploreru nad databází pravá myš a Tasks/Generate Scripts… Next, abychom se dostali na záložku Choose Objects, kde vybereme konkrétní tabulky, pro které potřebuje vyskriptovat data.
generate scripts1

Na další záložce vybereme, kde chceme skript uložit, třeba Open in new query window. A pak klikneme na tlačítko Advanced, kde vybereme jestli chceme skriptovat data, strukturu, nebo obojí. Já volím Data only. By default tam je Schema only a data bychom tak nedostali.

generate scripts2

Dvakrát Next a Finish a v novém okně máme insert skripty.

SET IDENTITY_INSERT [dbo].[Kategorie] ON 
GO
INSERT [dbo].[Kategorie] ([IdKategorie], [Kod], [Nazev], [PlatnostOd], [PlatnostDo]) VALUES (1, N'domacnost', N'domácnost', CAST(N'2021-09-30T08:53:06.287' AS DateTime), CAST(N'2099-12-31T00:00:00.000' AS DateTime))
GO
INSERT [dbo].[Kategorie] ([IdKategorie], [Kod], [Nazev], [PlatnostOd], [PlatnostDo]) VALUES (2, N'podnikatel', N'podnikatel', CAST(N'2021-09-30T08:53:06.287' AS DateTime), CAST(N'2099-12-31T00:00:00.000' AS DateTime))
GO
SET IDENTITY_INSERT [dbo].[Kategorie] OFF
GO
SET IDENTITY_INSERT [dbo].[KategorieTyp] ON 
GO
INSERT [dbo].[KategorieTyp] ([IdKategorieTyp], [IdKategorie], [Kod], [Nazev], [PlatnostOd], [PlatnostDo]) VALUES (1, 1, N'dum', N'dům', CAST(N'2021-09-30T08:53:06.310' AS DateTime), CAST(N'2099-12-31T00:00:00.000' AS DateTime))
GO
INSERT [dbo].[KategorieTyp] ([IdKategorieTyp], [IdKategorie], [Kod], [Nazev], [PlatnostOd], [PlatnostDo]) VALUES (2, 1, N'byt', N'byt', CAST(N'2021-09-30T08:53:06.310' AS DateTime), CAST(N'2099-12-31T00:00:00.000' AS DateTime))
GO
INSERT [dbo].[KategorieTyp] ([IdKategorieTyp], [IdKategorie], [Kod], [Nazev], [PlatnostOd], [PlatnostDo]) VALUES (3, 1, N'chata', N'chata', CAST(N'2021-09-30T08:53:06.310' AS DateTime), CAST(N'2099-12-31T00:00:00.000' AS DateTime))
GO
INSERT [dbo].[KategorieTyp] ([IdKategorieTyp], [IdKategorie], [Kod], [Nazev], [PlatnostOd], [PlatnostDo]) VALUES (4, 2, N'garaz', N'garáž', CAST(N'2021-09-30T08:53:06.310' AS DateTime), CAST(N'2099-12-31T00:00:00.000' AS DateTime))
GO
INSERT [dbo].[KategorieTyp] ([IdKategorieTyp], [IdKategorie], [Kod], [Nazev], [PlatnostOd], [PlatnostDo]) VALUES (5, 2, N'provozovna', N'provozovna', CAST(N'2021-09-30T08:53:06.310' AS DateTime), CAST(N'2099-12-31T00:00:00.000' AS DateTime))
GO
INSERT [dbo].[KategorieTyp] ([IdKategorieTyp], [IdKategorie], [Kod], [Nazev], [PlatnostOd], [PlatnostDo]) VALUES (6, 2, N'kancelar', N'kacelář', CAST(N'2021-09-30T08:53:06.310' AS DateTime), CAST(N'2099-12-31T00:00:00.000' AS DateTime))
GO
SET IDENTITY_INSERT [dbo].[KategorieTyp] OFF
GO

sp_generate_inserts

Pokud potřebujeme pravidelně přenášet data z databáze do databáze, tak se nám hodí nějaká procedura, která nám insert skript vytvoří. K dostání je třeba tady:https://github.com/lambacck/generate_inserts.

Pak v management studiu přepneme Results to text (Ctrl+T) a spustíme:

EXEC dbo.sp_generate_inserts @table_name = 'Kategorie'

Výsledkem pak je skript:

--INSERTs generated by 'sp_generate_inserts' stored procedure written by Vyas
--Build number: 22
--Problems/Suggestions? Contact Vyas @ vyaskn@hotmail.com
--http://vyaskn.tripod.com
 
SET NOCOUNT ON
 
SET IDENTITY_INSERT [dbo].[Kategorie] ON
GO
 
 
PRINT 'Inserting values into [Kategorie]'

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
INSERT INTO [Kategorie] ([IdKategorie],[Kod],[Nazev],[PlatnostOd],[PlatnostDo])VALUES(1,'domacnost','domácnost','Sep 30 2021  8:53:06:287AM','Dec 31 2099 12:00:00:000AM')
INSERT INTO [Kategorie] ([IdKategorie],[Kod],[Nazev],[PlatnostOd],[PlatnostDo])VALUES(2,'podnikatel','podnikatel','Sep 30 2021  8:53:06:287AM','Dec 31 2099 12:00:00:000AM')

PRINT 'Done'
 
 
SET IDENTITY_INSERT [dbo].[Kategorie] OFF
GO
SET NOCOUNT OFF

Najdi nahraď a regulární výrazy v SSMS

Často potřebuji přeformátovat kus T-SQL kódu, odstranit prázdné řádky, obalit něco do uvozovek, čárky nahradit koncem řádku a podobně. K tomu se hodí regulární výrazy podpořené v najdi a nahraď.

Kvantifikátory
určují kolikrát se smí opakovat předchozí element
* : 0 nebo vícekrát
+ : 1 nebo vícekrát
{n} : Přesně n krát
{m, n} : Mezi m a n krát. Pokud není zadáno n, pak nejméně m krát.

Zástupné znaky
\t : tab
\s : bílé znaky, taby, mezery
\d : číslice
\w : alfanumerické znaky [a-zA-Z0-9]
\r\n : odřádkování CR LF
. : jakýkoliv znak

Ukotvení
^ : Začátek řetězce
$ : Konec řetězce

Skupiny
Do kulatých závorek můžeme uzavřít část vyhledávaného řetězce. Na odpovídajicí hodnotu se pak můžeme odkázat při nahrazení jako na $1 pro první závorky, $2 pro druhé závorky, atd.

Příklady
Odstranění prázdných řádků
regex 01 odstraneni prazdnych radku

Uvozovka na konec řádku
regex 02 strich na konec radku

Nahrazení tabulátorů za uvozovka čárka uvozovka
regex 03 taby za strich carka strich

Seznam řetězců oddělený čárkou
regex 04 seznam retezcu oddeleny carkou

Odstranění zakomentovaných řádků
regex 05 odstraneni zakomentovanych radku

Odřádkování
regex 06 odradkovani

Přidání ISNULL
regex 07 pridani ISNULL

Odstranění komentářů
regex 08 odstraneni komentu

Klávesové zkratky pro SSMS

  • Ctrl + E nebo F5 pro spuštění dotazu
  • Ctrl + R – schová/zobrazí okno s výsledky dotazu
  • Ctrl + K, Ctrl + C: zakomentuje označené řádky
  • Ctrl + K, Ctrl + U: odkomentuje označené řádky
  • Ctrl + U: hodí kurzor do výběru databází, tam stačí začít psát název databáze, plus třeba dovybrat šipkama
  • Alt + F1 volá proceduru sp_help a jako parametr ji předá označený text
    Alt + F1 při označeném názvu tabulky vypíše sloupece tabulky, zda má IDENTITY, indexy, constrainty, cizí klíče. Sloupce se dají snadno vykopírovat a použít do rozepsaného selectu nebo insertu.
    Alt + F1 při označeném názvu procedury vypíše parametry procedury
  • Ctrl + G pro skok na konkrétní řádek textu
  • Shift + Alt + šipka nahoru/dolů roztáhne kurzor přes více řádků a umožní psát/mazat na více řádcích najednou