2013-10-30 58 views
0

說我有一個表「的TableX」在數據庫DB1,與DIFF第COLUMN1,列2,...等columnx這些列中的一個具有例如帶有感嘆號的數據說,「榴蓮!特克斯」如何查找數據庫中表中的哪一列有'!'感嘆號。

什麼是找到其表,其中分貝具有包含一個值的列的查詢「%!%」

這是搜索整個數據庫,給出數據庫名,表名,字段名。希望我的問題很明確。

+4

將整個數據庫導出到.sql文件,並通過使用cntrl + F找到它:) –

+1

這是一個跡象表明,如果您的數據模型包含相同「類型」數據的多個*列,編寫想要將所有這些列視爲相同的查詢是有意義的 - 這表明它們實際上應該是*單個列 - 並且該列旁邊應該包含其他列包含* data *它以某種方式最終變成嵌入在列或表名中。 –

+0

如果不是特殊字符......要知道哪個單元格的值爲'abc',我們也找不到? – Srupts

回答

0

整個數據庫導出到.sql文件,並使用CNTRL + F

而且replace/remove任何你想要

import it到新數據庫中找到它

+0

無法導出數據庫......它是一個龐大的數據庫......我們該怎麼做? – Srupts

+0

@你是否在使用任何用戶界面? –

0

我發現一個商店當我在尋找相同的東西時,從互聯網上的程序。您可以使用以下SP在表格中的所有列中查找文本/字符。

首先運行SP,然後使用EXEC執行sp並搜索參數值中的字符。

--EXEC SearchAllTables '!' 

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') 
        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

非常感謝。我會試試這個。 – Srupts

+0

我們沒有CREATE命令的權限:( – Srupts

+0

@Srupts然後你可以使用SP裏面的簡單查詢,複製那個腳本並用搜索參數單獨運行它,如果你想,那麼我可以幫你編寫腳本使用創建新的sp。 –