2014-03-12 96 views

回答

1
Try this stored procedure 


CREATE PROC SearchAllTables 
    (
     @SearchStr nvarchar(100) 
    ) 
    AS 
    BEGIN 

     CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630)) 

     SET NOCOUNT ON 

     DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110) 
     SET @TableName = '' 
     SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''') 

     WHILE @TableName IS NOT NULL 

     BEGIN 
      SET @ColumnName = '' 
      SET @TableName = 
      (
       SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)) 
       FROM  INFORMATION_SCHEMA.TABLES 
       WHERE   TABLE_TYPE = 'BASE TABLE' 
        AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName 
        AND OBJECTPROPERTY(
          OBJECT_ID(
           QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) 
           ), 'IsMSShipped' 
            ) = 0 
      ) 

      WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL) 

      BEGIN 
       SET @ColumnName = 
       (
        SELECT MIN(QUOTENAME(COLUMN_NAME)) 
        FROM  INFORMATION_SCHEMA.COLUMNS 
        WHERE   TABLE_SCHEMA = PARSENAME(@TableName, 2) 
         AND TABLE_NAME = PARSENAME(@TableName, 1) 
         AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar', 'int', 'decimal') 
         AND QUOTENAME(COLUMN_NAME) > @ColumnName 
       ) 

       IF @ColumnName IS NOT NULL 

       BEGIN 
        INSERT INTO #Results 
        EXEC 
        (
         'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630) 
         FROM ' + @TableName + ' (NOLOCK) ' + 
         ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2 
        ) 
       END 
      END  
     END 

     SELECT ColumnName, ColumnValue FROM #Results 
    END 
+0

我應該在這裏做什麼改變如果我想搜索「Admin」作爲例子? –

+0

感謝您的回覆。這是工作。 –

相關問題