sql >> Databáze >  >> RDS >> Access

Vyhledejte v databázi Microsoft SQL Server uložená data

Vyhledejte uložená data v databázi Microsoft SQL Server

Museli jste někdy dešifrovat databázi a určit, který sloupec obsahuje data, která potřebujete?

Nedávno jsem musel pracovat s extrakcí dat z databáze SQL pro použití v Microsoft Access a Power BI, bohužel struktura pojmenování databáze nebyla příliš intuitivní.

Jediným vodítkem, které jsem měl, byla zpráva ukazující příklad dat, která bylo třeba extrahovat, s popisky, které neměly žádný odkaz na názvy sloupců. To mohlo znamenat hodiny práce prohledávání databáze a prohlížení každé tabulky, tato konkrétní databáze měla 288 tabulek.

V minulosti jsem používal kód k hledání sloupce v tabulkách, ale v tomto případě by mi to nepomohlo.

Naštěstí jsem narazil na velmi zajímavý článek https://stackoverflow.com/questions/15757263/find-a-string-by-searching-all-tables-in-sql-server-management-studio-2008, tohle bylo perfektní pro mé potřeby. Potřeboval jsem jednoduše nastavit proměnnou s textem, který jsem hledal, a spustit kód. Během několika sekund mi byl poskytnut seznam tabulek a sloupců, kde se text objevil. Zanedlouho jsem měl seznam tabulek a sloupců, které jsem potřeboval zahrnout do svého projektu.

Toto řešení se vztahuje pouze na tabulky SQL Server a spouští se v SQL Server Management Studio. Také potřebujete mít instanci serveru SQL Server, která podporuje proměnné tabulky.

POUŽÍVEJTE DATABASE_NAMEDECLARE @SearchStr nvarchar(100) ='SEARCH_TEXT'DECLARE @Results TABLE (ColumnName nvarchar(370), ColumnValue nvarchar(3630))SET NOCOUNT ONDECLARE @TableName nvarchar (12Covar @nvarlum6), @nvarchar SearchStr2 nvarchar(110)SET @TableName =''SET @SearchStr2 =QUOTENAME('%' + @SearchStr + '%','''')WHILE @TableName NENÍ NULLBEGIN SET @ColumnName ='' SET @TableName =( SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE ='ZÁKLADNÍ TABULKA' AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_JECTName AND_OBECT)> @ID QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) ), 'IsMSShipped' ) =0 ) KDYŽ (@TableName NENÍ NULL) AND (@ColumnName NENÍ NULL) ZAČNĚTE NASTAVIT @ColumnName =( SELECT MI N(QUOTENAME(COLUMN_NAME)) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA =PARSENAME (@TableName, 2) AND TABLE_NAME =PARSENAME (@TableName, 1) AND DATA_TYPE IN ('char', 'varchar', 'nchar', , 'int', 'decimal') AND QUOTENAME (COLUMN_NAME)> @ColumnName ) POKUD @ColumnName NENÍ NULL BEGIN INSERT INTO @Results EXEC ( 'SELECT ''' + @TableName + '.' + @ColumnName + ''' , LEFT(' + @ColumnName + ', 3630) FROM ' + @TableName + ' (NOLOCK) ' + ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2 ) END END ENDSELECT ColumnName, ColumnValue FROM @Re> 

Doufám, že vám to také pomůže!


  1. Konektor Access Dataverse je nyní k dispozici k testování

  2. PostgreSQL:zlepšení výkonu pg_dump, pg_restore

  3. SQLite LIKE

  4. SQL Server DELETE – odstranění jednoho nebo více řádků z tabulky s mírně pokročilými scénáři