SORU
2 NİSAN 2009, PERŞEMBE


Nasıl MS-SQL bir veritabanı içinde herhangi bir tablonun herhangi bir sütununda bir değer aramak için?

Bir şekilde tek bir MS-SQL veritabanı içinde herhangi bir tablonun herhangi bir sütun içinde bir değer (benim durumumda türü char(64) UID) için arama var mı?

Masalar birbirine bağlı olması gerektiği hakkında hiçbir fikrin olmadan büyük bir veritabanı önünde oturuyorum. Tüm tablolar listesi ve sütunları yok etmek istiyorum o herhangi bir satır içinde belirli bir değeri içeren bulun. Bu mümkün mü?

Bir yolu, sadece bir metin dosyası içine tüm veritabanı dökümü ve daha herhangi bir metin editörü değeri aramak için kullanılacak olabilir ama bu eğer veritabanı çok büyük ise saf acı olurdu.

CEVAP
2 NİSAN 2009, PERŞEMBE


Bu soru için teşekkürler gerçekten yararlı bir konu. Bunu kendim de artık yoluna koymak da dahil olmak üzere sebep için kullanacağım. :-)

Nasıl tüm sütunları aramak için bir anahtar kelime için bir veritabanında tablolar?

http://vyaskn.tripod.com/search_all_columns_in_all_tables.htm

Andrew

-Düzenleme, link burada çürümeye durumunda: T-SQL, gerçek,

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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • circuschina

    circuschina

    16 Mart 2007
  • KendrickLamarVEVO

    KendrickLama

    9 ŞUBAT 2011
  • michal lelkowski

    michal lelko

    9 Temmuz 2006