最近要修改資料庫某些字串的資料

但總不能一個個開起來找吧!

太累了

 

SQL有個功能叫做"全文檢索功能"太複雜

(應該是用在我所敘述的情況吧?! )

 

而且時間緊迫下了關鍵字找到保哥的網站 

如何快速搜尋整個資料庫中所有表格所有欄位中的所有資料

裡面有提到另一種方法

 

在我的2012測試正常

不過用到公司舊系統 SQL2005會報錯

忽然想到我以前好像也有遇到相同的錯誤??!

訊息 139,層級 15,狀態 1,行 0
無法指派預設值給本機變數。
訊息 137,層級 15,狀態 2,行 18
必須宣告純量變數 "@SearchStr"。

查了一下是因為宣告變數又同時賦予值是在2008才有

因此將第一段從原本的  DECLARE @SearchStr nvarchar(200) = N'使用者本文' 
改成     DECLARE @SearchStr nvarchar(200) 
           set @SearchStr = N'使用者本文' 
就可以用了~~~

 

使用方法

新增查詢 > 選擇要查詢的資料庫 貼上下方語法 並維護搜尋字串> 執行

 2014-05-15_141003  

 

---------------------------------



    DECLARE @SearchStr nvarchar(200)  
      set @SearchStr = N'要查詢的文字'
      
    -- Copyright c 2002 Narayana Vyas Kondreddi. All rights reserved.  
    -- Purpose: To search all columns of all tables for a given search string  
    -- Written by: Narayana Vyas Kondreddi  
    -- Site: http://vyaskn.tripod.com  
    -- Tested on: SQL Server 7.0 and SQL Server 2000  
    -- Date modified: 28th July 2002 22:50 GMT  
      
      
    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')  
                    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 * FROM #Results  
      
    DROP TABLE #Results 

 

 

 

出處

記載著 Will 在網路世界的學習心得與技術分享
http://blog.miniasp.com/post/2010/07/13/Search-all-columns-of-all-tables-in-a-database-for-a-keyword.aspx

參考

http://social.msdn.microsoft.com/Forums/zh-TW/20fd6c0d-4a0f-43d2-9ccb-9598832e215d/tsql-?forum=240

http://www.dotblogs.com.tw/dotjum/archive/2009/08/01/9796.aspx

在 SQL Server 2005 中取得所有欄位定義的方法(含備註欄位)
http://blog.miniasp.com/post/2007/11/05/How-to-get-detailed-Data-Dictionary-in-SQL-Server-2005.aspx

 

 

arrow
arrow
    全站熱搜

    我只是個打雜小弟 發表在 痞客邦 留言(1) 人氣()