Поиск заданного c двоичного столбца во всех таблицах в SQL базе данных сервера - PullRequest
0 голосов
/ 02 апреля 2020

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

Я пытаюсь найти, где значение SID_BINARY(N'S-1-4-20-45654656-564654656-4566786-12346') находится во всех моих таблицы.

Я использую SQL Server 2008 R2.

Пример кода:

DECLARE @SQL VARCHAR(MAX)
DECLARE @SearchString VARCHAR(MAX)
SET @SQL=''

-- ------------------------------------------
-- Enter the string to be searched for here :
--
SET @SearchString = 'SID_BINARY(N''S-1-4-20-45654656-564654656-4566786-12346'')'
-- ------------------------------------------

SELECT   @SQL = @SQL + 'SELECT CONVERT(VARCHAR(MAX),COUNT(*)) + '' matches in column ''+'''
         + C.name + '''+'' on table '' + ''' + SC.name + '.' + T.name +
         ''' [Matches for '''+@SearchString+''':] FROM ' +
         QUOTENAME(SC.name) + '.' + QUOTENAME(T.name) + ' WHERE ' + QUOTENAME(C.name) +
         ' LIKE ''%' + @SearchString +
         '%'' HAVING COUNT(*)>0 UNION ALL ' +CHAR(13) + CHAR(10)
FROM     sys.columns C
JOIN     sys.tables T
ON       C.object_id=T.object_id
JOIN     sys.schemas SC
ON       SC.schema_id=T.schema_id
JOIN     sys.types ST
ON       C.user_type_id=ST.user_type_id
JOIN     sys.types SYST
ON       ST.system_type_id=SYST.user_type_id
AND      ST.system_type_id=SYST.system_type_id
WHERE    SYST.name IN ('varchar','nvarchar','text','ntext','char','nchar', 'varbinary', 'binary')
ORDER BY T.name, C.name

-- Strip off the last UNION ALL
IF LEN(@SQL)>12
  SELECT @SQL=LEFT(@SQL,LEN(@SQL)- 12)

EXEC(@SQL)

--PRINT @SQL

С этим кодом я получаю следующую ошибку в каждой строке:

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'S'.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...