Tìm kiếm từ khóa trong tất cả các cột của tất cả các bảng / Sử dụng FETCH , EXEC dbo.sp_ExecuteSQL

Tìm kiếm từ khóa trong tất cả các cột của tất cả các bảng
Sử dụng FETCH , EXEC dbo.sp_ExecuteSQL


Link : http://msdn.microsoft.com/en-us/library/ms188001.aspx
=> sp_executesql (Transact-SQL)



VD1:


DECLARE @SQL NVARCHAR(100)  
SET @SQL = N'SELECT TOP 1 * FROM sys.tables'  
EXECUTE sp_executesql @SQL


VD2:


DECLARE @KeyWord varchar(100)
SET @KeyWord = 'itd'
DECLARE @itemTable varchar(100)
DECLARE ListTable CURSOR FOR SELECT name FROM sys.tables WHERE type ='u'


OPEN ListTable
FETCH next FROM ListTable INTO @itemTable
WHILE @@FETCH_STATUS=0
BEGIN
   BEGIN try
   
DECLARE @itemColumn varchar(100)
       DECLARE ListColumn CURSOR FOR SELECT name FROM sys.columns WHERE object_id=object_id(@itemTable)
       OPEN ListColumn
       FETCH next FROM ListColumn INTO @itemColumn
       WHILE @@FETCH_STATUS=0
       BEGIN
BEGIN try
DECLARE @sql NVARCHAR(max)
DECLARE @Check BIT
--SET @sql = 'IF EXISTS(select ' + @itemColumn+ ' from ' + @itemTable + ' where ' + @itemColumn + '=''taitd'') BEGIN SET @Check = 1 END'
SET @sql = 'IF EXISTS(select ' + @itemColumn+ ' from ' + @itemTable + ' where ' + @itemColumn + ' LIKE ''%'+@KeyWord+'%'') BEGIN SET @Check = 1 END'
EXEC dbo.Sp_ExecuteSql @sql, N'@Check BIT OUTPUT', @Check OUTPUT
IF @Check = 1
BEGIN
--PRINT('Column: '+@itemColumn+' - Table: '+@itemTable)
SELECT @itemColumn AS 'Column', @itemTable AS [Table]
END
SET @Check = 0
END try
BEGIN catch
--PRINT 'error 1'
END catch
FETCH next FROM ListColumn INTO @itemColumn
END
CLOSE ListColumn
DEALLOCATE ListColumn
   
   END try
   BEGIN catch
       PRINT 'error 2'
   END catch
   FETCH next FROM ListTable INTO @itemTable
END
CLOSE ListTable
DEALLOCATE ListTable


VD3:


DECLARE @SQLString nvarchar(500);
SET @SQLString = N'select * from mytest where id=@ID';
EXECUTE sp_executesql @SQLString, N'@ID tinyint', 1;


VD4: Using the OUTPUT Parameter

DECLARE @SQL nvarchar(500);
DECLARE @OUTID nvarchar(25);


SET @SQL = N'SELECT @OUTID = MAX(ID) FROM MyTest';    
EXECUTE sp_executesql
   @SQL
   ,N'@OUTID nvarchar(25) OUTPUT'
   ,@OUTID OUTPUT;    
SELECT @OUTID;

VD5:
DECLARE @sql nvarchar(500)
DECLARE @Count int
DECLARE @MaxID int
DECLARE @Name nvarchar(100)
DECLARE @Input nvarchar(100)
SET @sql = N'select @Count = count(*), @MaxID = max(ID), @Name = @Input from MyTest'
EXEC sp_executesql
@sql, N'@MaxID int OUTPUT, @Count int OUTPUT, @Name nvarchar(100) OUTPUT, @Input nvarchar(100)',
@MaxID OUTPUT,
@Count OUTPUT,
@Name OUTPUT,
@Input='TaiTD' -- Có thể chỉ là 'TaiTD'
SELECT @MaxID AS MaxID, @Count AS [Count], @Name AS [Name]


GIẢI THÍCH BIỂU THỨC SQL:
- Khai báo biến sql + kiểu dữ liệu
- Khai báo các biến + kiểu dữ liệu
- EXEC sp_executesql
[String sql chứa các tham số],
[N'Khai báo lại các biến và chỉ ra kiểu truyền vào là gì? OUTPUT hay không?'],
[Giá trị của các biến truyền vào, nếu biến là OUTPUT thì nó sẽ truyền vào và EXEC SQL,     sau đó lấy giá trị được gán rồi truyền ra]

VD6:
Tạo Store với tham số kiểu OUTPUT
CREATE PROC tinhtong
@a int,
@b int,
@kq int output
AS
SET @kq = @a+@b
--
DECLARE @s int
EXEC tinhtong 5, 7, @s output
PRINT @s