代码之家  ›  专栏  ›  技术社区  ›  nano

如何在sql server数据库中查找字符串

  •  1
  • nano  · 技术社区  · 8 年前

    我现在有一个数据库,它已被移动到不同的服务器,并且有不同的名称,这会导致一些问题,因为我链接到旧服务器,并且不知道链接此旧服务器和数据库的所有条目。

    我一直有这个错误:

    错误:100000严重性:16状态:1错误代码:-1073548784-错误 描述:执行查询declare@sql nvarchar(2000)declare @tableEntity v…。“失败,错误如下:OLE DB 链接服务器“10.7.11.20”的提供程序“sqlncli11”不包含 “sax2012r2_prod”“dbo”“coresync”“表。桌子也一样 不存在或当前用户对此没有权限 桌子。”可能的失败原因:查询有问题, “ResultSet”属性设置不正确,参数设置不正确, 或连接未正确建立。

    我创建了一个sql server别名,将所有10.7.11.20请求映射到新服务器。

    在sax2012r2 prod中,使用数据库或以某种方式定位它正在查找的位置是否也可以这样做?

    1 回复  |  直到 8 年前
        1
  •  1
  •   EzLo tumao kaixin    8 年前

    可以使用此游标搜索当前连接实例的所有数据库上的对象定义(触发器、函数、存储过程等)。

    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 .