Как найти строку в базе данных SQL Server - PullRequest
0 голосов
/ 11 июня 2018

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

Я получаю эту ошибку:

Ошибка: 100000 Серьезность: 16 Состояние: 1 Код ошибки: -1073548784 - Описание ошибки: Выполнение запроса "Declare @sql nvarchar (2000)не удалось объявить @TableEntity v ... "со следующей ошибкой: поставщик OLE DB" SQLNCLI11 "для связанного сервера" 10.7.11.20 "не содержит таблицу" "sax2012r2_prod". "dbo". "coresync" ".Таблица либо не существует, либо текущий пользователь не имеет разрешений для этой таблицы. ". Возможные причины сбоя: проблемы с запросом, неправильно задано свойство ResultSet, неправильно заданы параметры или неправильно установлено соединение.

Я создал псевдоним SQL Server, который отображает все запросы 10.7.11.20 на новый сервер.

Возможно ли аналогичным образом сделать это с базой данных или как-то найти места, гдеэто смотрит в sax2012r2_prod?

1 Ответ

0 голосов
/ 12 июня 2018

Этот курсор можно использовать для поиска определений объектов (триггеров, функций, хранимых процедур и т. Д.) Во всех базах данных текущего подключенного экземпляра.

DECLARE @SearchString VARCHAR(100) = 'sax2012r2_prod'


IF OBJECT_ID('tempdb..#FoundProceses') IS NOT NULL
    DROP TABLE #FoundProceses

CREATE TABLE #FoundProceses (
    DatabaseName VARCHAR(1000),
    SchemaName VARCHAR(1000),
    ObjectType VARCHAR(1000),
    ObjectName VARCHAR(1000),
    CreatedDate DATETIME,
    ModifiedDate DATETIME)

DECLARE @c_DatabaseName VARCHAR(100)
DECLARE databaseCursor CURSOR FOR
    SELECT D.Name FROM master.sys.databases AS D WHERE D.database_id > 4 ORDER BY D.Name

OPEN databaseCursor
FETCH NEXT FROM databaseCursor INTO @c_DatabaseName

DECLARE @v_DynamicSQLInsert VARCHAR(MAX)

WHILE @@FETCH_STATUS = 0
BEGIN

    SET @v_DynamicSQLInsert = '

        USE ' + @c_DatabaseName + '

        INSERT INTO #FoundProceses (
            DatabaseName,
            ObjectType,
            SchemaName,
            ObjectName,
            CreatedDate,
            ModifiedDate)
        SELECT
            DatabaseName = ''' + @c_DatabaseName + ''',
            ObjectType = O.type_desc,
            SchemaName = SCHEMA_NAME(O.[schema_id]),
            ObjectName = O.name,
            CreatedDate = O.create_date,
            ModifiedDate = O.modify_date
        FROM
            ' + QUOTENAME(@c_DatabaseName) + '.sys.objects AS O
        WHERE
            OBJECT_DEFINITION(O.object_id) LIKE ''%' + @SearchString + '%'' AND 
            O.type IN (''P'', ''IF'', ''FN'', ''TF'', ''PC'', ''TR'', ''V'')'

    EXEC (@v_DynamicSQLInsert)

    FETCH NEXT FROM databaseCursor INTO @c_DatabaseName

END

CLOSE databaseCursor
DEALLOCATE databaseCursor


SELECT
    F.DatabaseName,
    F.SchemaName,
    F.ObjectType,
    F.ObjectName,
    F.CreatedDate,
    F.ModifiedDate
FROM
    #FoundProceses AS F
ORDER BY
    F.DatabaseName,
    F.SchemaName,
    F.ObjectType,
    F.ObjectName

Он запрашивает результат OBJECT_DEFINITION() функция на каждом объекте от sys.objects.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...