Търсете в базата данни на Microsoft SQL Server за съхранени данни
Случвало ли ви се е да дешифрирате база данни и да идентифицирате в коя колона има данните, от които се нуждаете?
Наскоро ми се наложи да работя с извличането на данни от SQL база данни за използване в Microsoft Access и Power BI, за съжаление структурата на именуването на базата данни не беше много интуитивна.
Единственото ръководство, което имах, беше отчет, показващ пример за данните, които трябваше да бъдат извлечени, с етикети, които нямаха препратка към имената на колоните. Това може да означава часове работа за търсене в базата данни и преглед на всяка таблица, тази конкретна база данни имаше 288 таблици.
В миналото съм използвал код за търсене на колона в таблици, но в този случай това няма да ми помогне.
За щастие попаднах на много интересна статия https://stackoverflow.com/questions/15757263/find-a-string-by-searching-all-tables-in-sql-server-management-studio-2008, това беше перфектно за моите нужди. Просто трябваше да задам променливата с текста, който търсех, и да изпълня кода. За секунди получих списък с таблиците и колоните, където се появи текстът. Не след дълго имах списък с таблиците и колоните, които трябваше да включа в проекта си.
Моля, имайте предвид, че това решение се отнася само за таблици на SQL Server и се изпълнява в SQL Server Management Studio. Също така трябва да имате екземпляр на SQL Server, който поддържа променливи на таблица.
ИЗПОЛЗВАТЕ DATABASE_NAMEDECLARE @SearchStr nvarchar(100) ='SEARCH_TEXT'DECLARE @Results TABLE (ColumnName nvarchar(370), ColumnValue nvarchar(3630))SET NOCOUNT ONDECLARE @TableColunName(@TableColunName), @TableColunName SearchStr2 nvarchar(110)SET @TableName =''SET @SearchStr2 =QUOTENAME('%' + @SearchStr + '%','''') ДОКАТО @TableName НЕ Е NULLBEGIN SET @ColumnName ='' SET @TableName =( ИЗБЕРЕТЕ MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)) ОТ INFORMATION_SCHEMA.TABLES, КЪДЕТО TABLE_TYPE ='ОСНОВНА ТАБЛИЦА' И QUOTENAME(TABLE_SCHEMA) + '.' + '.' QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) ), 'IsMSShipped' ) =0 ) ДОКАТО (@Име на таблицата НЕ Е NULL) И (@Име на колона НЕ Е NULL) BEGIN SET =(ИЗБИРАНЕ НА ИМЕ на колона N(QUOTENAME(COLUMN_NAME)) ОТ INFORMATION_SCHEMA.COLUMNS, КЪДЕ TABLE_SCHEMA =PARSENAME(@TableName, 2) И TABLE_NAME =PARSENAME(@TableName, 1) И DATA_TYPE IN ('char', 'nvarchar', 'nvarchar', , 'int', 'decimal') И QUOTENAME(COLUMN_NAME)> @ColumnName ) АКО @ColumnName НЕ Е NULL ЗАПОЧНЕТЕ INSERT INTO @Results EXEC ('SELECT ''' + @TableName + '.' + @ColumnName + ''' , LEFT(' + @ColumnName + ', 3630) ОТ ' + @TableName + ' (NOLOCK) ' + ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2 ) КРАЙ КРАЙ ENDSELECT ColumnName, FROM @Resulue>Надявам се и това да ви помогне!