Việc tìm kiếm 1 từ khóa nào đó thuộc bảng nào sẽ vô cùng khó khăn khi bạn thực sự không nhớ từ khóa đó nằm ở bảng nào. Thông thường chúng ta sẽ mở từng bảng ra và truy vấn từ khóa trong chính bảng đó.
Để thuận tiện hơn trong việc tìm kiếm 1 từ khóa mà có thể nằm ở nhiều bảng khác nhau, chúng ta có thể sử dụng 1 thủ tục dưới đây để truy vấn cho tất cả các bảng trong cơ sở dữ liệu.
DECLARE @KeyWord nvarchar(100)SET @KeyWord = N'quần áo'--SELECT @KeyWordDECLARE @itemTable nvarchar(1000)DECLARE ListTable CURSOR FOR SELECT name FROM sys.tables WHERE type ='u'OPEN ListTableFETCH next FROM ListTable INTO @itemTableWHILE @@FETCH_STATUS=0BEGINBEGIN tryDECLARE @itemColumn nvarchar(100)DECLARE ListColumn CURSOR FOR SELECT name FROM sys.columns WHERE object_id=object_id(@itemTable)OPEN ListColumnFETCH next FROM ListColumn INTO @itemColumnWHILE @@FETCH_STATUS=0BEGINBEGIN tryDECLARE @sql NVARCHAR(max)DECLARE @Check BITSET @sql = 'IF EXISTS(select [' + @itemColumn+ '] from ' + @itemTable + ' where ['+ @itemColumn + '] LIKE N''%'+@KeyWord+'%'' escape ''['') BEGIN SET @Check = 1 END'--PRINT @sqlEXEC dbo.Sp_ExecuteSql @sql, N'@Check BIT OUTPUT', @Check OUTPUTIF @Check = 1BEGIN--PRINT('Column: '+@itemColumn+' - Table: '+@itemTable)--EXEC('SELECT ['+@itemColumn+'] AS ''Column'', @itemTable AS [Table]')SELECT @itemColumn AS 'Column', @itemTable AS [Table]--PRINT 'ok'ENDSET @Check = 0END tryBEGIN catchPRINT @@errorEND catchFETCH next FROM ListColumn INTO @itemColumnENDCLOSE ListColumnDEALLOCATE ListColumnEND tryBEGIN catchPRINT 'error 2'END catchFETCH next FROM ListTable INTO @itemTableENDCLOSE ListTableDEALLOCATE ListTable
taitd là ai?
ReplyDeleteĐăng bài phải xóa hết comment màu xanh đi chứ anh bạn, ai lại để thế
ReplyDelete