2014-06-18 18 views
0

是否可以在整個數據庫中搜索某個INT類型的值?在數據庫中搜索「int」

從類似的話題發現這個但這也僅限於字符串

DECLARE @SearchStr nvarchar(100) 

SET @SearchStr = '輸入的數據在這裏'

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 

DROP TABLE #Results

+0

Quel SQL? Quel SQL? – wildplasser

回答

1
SELECT OBJECT_NAME(c.OBJECT_ID) TableName, c.name ColumnName 
FROM sys.columns AS c 
JOIN sys.types AS t ON c.user_type_id=t.user_type_id 
WHERE t.name = 'int' --you can change text to other datatypes 
ORDER BY c.OBJECT_ID; 
GO 
0
select * from INFORMATION_SCHEMA.COLUMNS 
where data_type = 'INT'