Как я могу искать стоимость в любом поле любой таблицы базы данных?

У меня есть необходимость искать стоимость типа текста, но не, в котором таблица могла бы храниться, из-за этого мне хотелось бы знать, существует ли какой-то способ искать во всех существующих структурах внутри той же базы данных в SQL.

Вдруг смогли бы существует какая-то команда или было бы возможно создавать store procedure, который мог бы делать этот тип работы общего способа.

6
задан 18.01.2017, 23:23
1 ответ

С этим sp Ты Сможешь busar во всей Bd.

CREATE PROC BuscaValorEnBBDD
(
@StrValorBusqueda nvarchar(100)
)
AS
BEGIN

CREATE TABLE #Resultado (NombreColumna nvarchar(370), ValorColumna nvarchar(3630))
SET NOCOUNT ON

DECLARE @NombreTabla nvarchar(256),
@NombreColumna nvarchar(128),
@StrValorBusqueda2 nvarchar(110)

SET  @NombreTabla = ''
SET @StrValorBusqueda2 = QUOTENAME('%' + @StrValorBusqueda + '%','''')

WHILE @NombreTabla IS NOT NULL
     BEGIN
     SET @NombreColumna = ''
     SET @NombreTabla =
     (SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
     FROM INFORMATION_SCHEMA.TABLES
     WHERE TABLE_TYPE = 'BASE TABLE'
     AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @NombreTabla
     AND OBJECTPROPERTY(
     OBJECT_ID(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)), 'IsMSShipped') = 0)

     WHILE (@NombreTabla IS NOT NULL) AND (@NombreColumna IS NOT NULL)
         BEGIN
         SET @NombreColumna =
         (SELECT MIN(QUOTENAME(COLUMN_NAME))
         FROM INFORMATION_SCHEMA.COLUMNS
         WHERE TABLE_SCHEMA = PARSENAME(@NombreTabla, 2)
         AND TABLE_NAME = PARSENAME(@NombreTabla, 1)
         AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')
         AND QUOTENAME(COLUMN_NAME) > @NombreColumna)

         IF @NombreColumna IS NOT NULL
              BEGIN
              INSERT INTO #Resultado
              EXEC
              ('SELECT ''' + @NombreTabla + '.' + @NombreColumna + ''', LEFT(' + @NombreColumna + ', 3630)
              FROM ' + @NombreTabla + ' (NOLOCK) ' + ' WHERE ' + @NombreColumna + ' LIKE ' + @StrValorBusqueda2)
              END 
         END
     END
     SELECT NombreColumna, ValorColumna FROM #Resultado
END

ты это выполняешь sig. форму:

EXEC dbo.BuscaValorEnBBDD 'texto'
8
ответ дан 24.11.2019, 14:43
  • 1
    Гениальный, большое спасибо Ариэль, прямо сейчас это тестирую и я комментирую тебе. – Juan Manuel Palacios 17.03.2016, 21:59
  • 2
    Уже я сделал доказательство, функцию и # 243; верно, но потом он сказал первой, что не pod и # 237; чтобы создавать снова таблицу #Resultado , так что он aument и # 233; Дроп Табле #Resultado и я заношу в список. Снова большое спасибо Ариэль из-за твоей помощи. – Juan Manuel Palacios 17.03.2016, 22:17
  • 3
    @JuanManuelPalacios, s и # 243; это, чтобы прояснять и хотя он не имеет общее с вопросом, что ты комментируешь, я последовал за тобой и # 243; потому что ты конечно выполнил c и # 243; говорит SP снаружи, а именно и #225; mbito временной таблицы, созданной глобальную эру и он не заканчивался, закончив SP, равной не состоит плохая идея в том, чтобы добавлять решение, которое ты комментируешь в конце SP. и #233; xitos. – Juan Ruiz de Castilla 18.03.2016, 19:16