SQL Server bir metnin hangi tablolarda geçtiğini nasıl bulabiliriz?
SQL Server’da bir metnin hangi tablolarda geçtiğini bulmak için aşağıdaki örnek sorguyu kullanabilirsiniz:
DECLARE @SearchText NVARCHAR(100) = ‘Cem’; — Aranacak metin
DECLARE @TableName NVARCHAR(256)
DECLARE @ColumnName NVARCHAR(128)
DECLARE @SQL NVARCHAR(MAX)
DECLARE @Count INT
— Geçici tablo sonucu saklamak için
CREATE TABLE #Results (
TableName NVARCHAR(256),
ColumnName NVARCHAR(128),
MatchCount INT
)
DECLARE col_cursor CURSOR FOR
SELECT t.name AS TableName, c.name AS ColumnName
FROM sys.tables t
JOIN sys.columns c ON t.object_id = c.object_id
JOIN sys.types ty ON c.user_type_id = ty.user_type_id
WHERE ty.name IN (‘char’, ‘nchar’, ‘varchar’, ‘nvarchar’, ‘text’, ‘ntext’)
— sadece karakter tipleri
ORDER BY t.name, c.name
OPEN col_cursor
FETCH NEXT FROM col_cursor INTO @TableName, @ColumnName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = ‘
SELECT @cnt = COUNT(*)
FROM [‘ + @TableName + ‘]
WHERE [‘ + @ColumnName + ‘] LIKE ”%’ + @SearchText + ‘%”’
BEGIN TRY
EXEC sp_executesql @SQL, N’@cnt INT OUTPUT’, @cnt=@Count OUTPUT
IF @Count > 0
BEGIN
INSERT INTO #Results (TableName, ColumnName, MatchCount)
VALUES (@TableName, @ColumnName, @Count)
END
END TRY
BEGIN CATCH
— Erişilemeyen tablolar varsa hata atlaması için
END CATCH
FETCH NEXT FROM col_cursor INTO @TableName, @ColumnName
END
CLOSE col_cursor
DEALLOCATE col_cursor
— Sonuçları göster
SELECT * FROM #Results
ORDER BY TableName, ColumnName
DROP TABLE #Results
1 yorum