Bir DB tüm tablolarda aramak için bir dize satır ve sütunların
Büyük bir veritabanı içinde kayboldum ve ben bu veri nereden geldiğini bulmak mümkün değilim. Eğer SQL Server 2005 ile mümkün tabloları, satırları ve sütunları veritabanı her bir dize için arama olup olmadığını merak ediyorum?
Herkes eğer mümkünse ve nasıl bir fikir var mı?
CEVAP
Bu kod, 2005, ama birkaç uyarılar SQL yapmalıdır:
Tüm nesneler okunur aktiviteler ait olduğunu varsayar. Bunu ayarlamak gerekir Eğer durum böyle değilse.
ACAYİP yavaş. Tablolar sadece bir avuç var ve tamamlamak için birkaç dakika sürdü, bu küçük bir veritabanı üzerinde test ettim. Eğer veritabanınız sonra senin anlayamayacağın kadar büyük ise, bu muhtemelen kullanılamaz zaten.
Kendim yazdım bunu yazdım. Herhangi bir hata işleme koymak istemedim ve özellikle imleçler sık sık kullanmak değil, çünkü başka ıslaklık olabilir. Örneğin, ayırmayı kaldırma/yeniden/her zaman kapatmak yerine sütun imleci yenilemek için bir yol olduğunu düşünüyorum.
Veritabanı anlayamazsın ya da nereden geldiğini bilmiyorsanız, o zaman muhtemelen bilen birini bulmak. Eğer bu verileri nerede bulabilirsiniz varsa bile, bir yerde kopyalanmış olabilir veya anlamadığın veritabanı diğer yönleri olabilir. Eğer şirketinizde kimsenin veritabanı anlarsa o zaman çok büyük bir dertte.
DECLARE
@search_string VARCHAR(100),
@table_name SYSNAME,
@table_id INT,
@column_name SYSNAME,
@sql_string VARCHAR(2000)
SET @search_string = 'Test'
DECLARE tables_cur CURSOR FOR SELECT name, object_id FROM sys.objects WHERE type = 'U'
OPEN tables_cur
FETCH NEXT FROM tables_cur INTO @table_name, @table_id
WHILE (@@FETCH_STATUS = 0)
BEGIN
DECLARE columns_cur CURSOR FOR SELECT name FROM sys.columns WHERE object_id = @table_id AND system_type_id IN (167, 175, 231, 239)
OPEN columns_cur
FETCH NEXT FROM columns_cur INTO @column_name
WHILE (@@FETCH_STATUS = 0)
BEGIN
SET @sql_string = 'IF EXISTS (SELECT * FROM ' @table_name ' WHERE [' @column_name '] LIKE ''%' @search_string '%'') PRINT ''' @table_name ', ' @column_name ''''
EXECUTE(@sql_string)
FETCH NEXT FROM columns_cur INTO @column_name
END
CLOSE columns_cur
DEALLOCATE columns_cur
FETCH NEXT FROM tables_cur INTO @table_name, @table_id
END
CLOSE tables_cur
DEALLOCATE tables_cur
Kolay yeni satır üzerinde bir dize böl...
Nasıl/NVARCHAR dize eklemek bir SQL Se...
Nasıl bir dize C / birden fazla satır ...
Nasıl dize için bir PHP işlevi bir Değ...
Nasıl bir JSON dize yeni satır karakte...