2013-09-11 70 views
0

數據庫中的空間我正在尋找一個在我的數據庫稱爲「王」的字符串,使用此存儲過程的子字符串:搜索首尾的使用維亞斯Kondreddi的存儲過程

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

    -- Copyright © 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 ColumnName, ColumnValue FROM #Results 
END 

我也有一個在表中的記錄,像這樣的:(從Kondreddi的存儲過程:)

1 -- Felicidad T.E. Sagalongos 
2 -- Bob Ong 
3 -- Bob Ong 
4 -- Bob Ong 
5 -- Bob Ong 
6 -- Bob Ong 
7 -- Komunikasyon sa Akademikong Filipino 
8 -- Book Of Tongue Twisters For English & Students 
9 -- Diksiyunaryong Ingles-Pilipino Pilipino-Ingles 
10 -- Hong Kong Apothecary: A Visual History of Chinese Medicine Packaging 
11 -- A Song of Ice and Fire 
12 -- Ang Paboritong Libro ni Hudas 

的事情是生成的,我要搜索一個特定的字符串,「醉翁」,唯一的結果,我想告訴那些寫「Bob Ong」或「Shirley Ong」。我不希望「宋」和「香港」等詞出現。我嘗試使用空格。它給了我空白的結果。有另一種方法嗎?

非常感謝。 :)

回答

0

從查詢的這個部分,請刪除字符(%):

QUOTENAME('%' + @SearchStr,'''') 
+0

它還挺工作。只是有一個問題:例如,我在'Bob Ong'中搜索'Bob',當我希望它會返回Bob Ong時,它不會返回任何內容。 –