Create Proc [dbo].[Upc_SearchTextOnDB]
(
@SearchText nvarchar(100)
)
AS
BEGIN
SET NOCOUNT ON
Declare @LoopID int
,@StrSQL nvarchar(max)
,@TabName nvarchar(100)
,@TempStr nvarchar(100)
,@WhereStr nvarchar(max)
,@HasRow int
set @HasRow = 0
IF(OBJECT_ID('Tempdb.dbo.#Tab') IS NOT NULL)
BEGIN
DROP TABLE #Tab;
END
Create table #Tab
(
ID int identity(1,1) primary key,
TabName nvarchar(100),
HasRow int default 0 not null,
StrSQL nvarchar(max)
)
insert into #Tab(TabName)
select A.name from sys.tables A
where is_ms_shipped = 0
and exists
(
select 1 from sys.columns where object_id = A.object_id and system_type_id in(99,167,175,231,239)
)
SET @LoopID = @@ROWCOUNT;
WHILE(@LoopID >1)
BEGIN
SELECT @TabName = TabName FROM #Tab WHERE ID = @LoopID
SET @TempStr = N' or ';
SET @WhereStr = Stuff(Isnull((select @TempStr+N'['+B.name +N']'+N' like N'''+@SearchText+'%'''
from sys.tables A,sys.columns B
where B.object_id = A.object_id and B.system_type_id in(99,167,175,231,239)
and is_ms_shipped = 0
and A.name =@TabName
for xml path('')),N''),1,LEN(@TempStr),N'')
set @HasRow = 0;
SET @StrSQL = N'SELECT @HasRow = count(1) FROM ['+@TabName+'] WHERE '+@WhereStr
Print @StrSQL
EXEC SP_EXECUTESQL @StrSQL,N'@HasRow int output',@HasRow OUTPUT
--SET @StrSQL = N'SELECT TOP 1 @HasRowOUT = 1 FROM @Table WHERE @Where'
--EXEC SP_EXECUTESQL @StrSQL,N'@Table nvarchar(100),@Where nvarchar(max),@HasRowOUT bit output',@Table = @TabName,@Where = @WhereStr,@HasRowOUT = @HasRow OUTPUT
IF(@HasRow >0)
BEGIN
UPDATE #Tab SET HasRow = @HasRow
,StrSQL = @StrSQL
WHERE ID = @LoopID
END
SET @LoopID = @LoopID -1;
END
SELECT TabName,HasRow,@SearchText, StrSQL FROM #Tab WHERE HasRow >0
TRUNCATE TABLE #Tab;
DROP TABLE #Tab;
SET NOCOUNT OFF
END
GO
搜索數據庫表對象中包含特定字符串
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.