最近要修改資料庫某些字串的資料
但總不能一個個開起來找吧!
太累了
SQL有個功能叫做"全文檢索功能"太複雜
(應該是用在我所敘述的情況吧?! )
而且時間緊迫下了關鍵字找到保哥的網站
裡面有提到另一種方法
在我的2012測試正常
不過用到公司舊系統 SQL2005會報錯
忽然想到我以前好像也有遇到相同的錯誤??!
訊息 139,層級 15,狀態 1,行 0 無法指派預設值給本機變數。 訊息 137,層級 15,狀態 2,行 18 必須宣告純量變數 "@SearchStr"。 |
查了一下是因為宣告變數又同時賦予值是在2008才有
因此將第一段從原本的 DECLARE @SearchStr nvarchar(200) = N'使用者本文'
改成 DECLARE @SearchStr nvarchar(200)
set @SearchStr = N'使用者本文'
就可以用了~~~
使用方法
新增查詢 > 選擇要查詢的資料庫 貼上下方語法 並維護搜尋字串> 執行
---------------------------------
DECLARE @SearchStr nvarchar(200)
set @SearchStr = N'要查詢的文字'
-- Copyright c 2002 Narayana Vyas Kondreddi. All rights reserved.
-- Purpose: To search all columns of all tables for a given search string
-- Written by: Narayana Vyas Kondreddi
-- Site: http://vyaskn.tripod.com
-- Tested on: SQL Server 7.0 and SQL Server 2000
-- Date modified: 28th July 2002 22:50 GMT
CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))
SET NOCOUNT ON
DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
SET @TableName = ''
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')
WHILE @TableName IS NOT NULL
BEGIN
SET @ColumnName = ''
SET @TableName =
(
SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
AND OBJECTPROPERTY(
OBJECT_ID(
QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
), 'IsMSShipped'
) = 0
)
WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
BEGIN
SET @ColumnName =
(
SELECT MIN(QUOTENAME(COLUMN_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2)
AND TABLE_NAME = PARSENAME(@TableName, 1)
AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')
AND QUOTENAME(COLUMN_NAME) > @ColumnName
)
IF @ColumnName IS NOT NULL
BEGIN
INSERT INTO #Results
EXEC
(
'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630)
FROM ' + @TableName + ' (NOLOCK) ' +
' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
)
END
END
END
SELECT * FROM #Results
DROP TABLE #Results
出處
記載著 Will 在網路世界的學習心得與技術分享
http://blog.miniasp.com/post/2010/07/13/Search-all-columns-of-all-tables-in-a-database-for-a-keyword.aspx
參考
http://social.msdn.microsoft.com/Forums/zh-TW/20fd6c0d-4a0f-43d2-9ccb-9598832e215d/tsql-?forum=240
http://www.dotblogs.com.tw/dotjum/archive/2009/08/01/9796.aspx
在 SQL Server 2005 中取得所有欄位定義的方法(含備註欄位)
http://blog.miniasp.com/post/2007/11/05/How-to-get-detailed-Data-Dictionary-in-SQL-Server-2005.aspx