有沒有辦法通過(存儲過程,函數,視圖)集來搜索常量的用法?如何在sql server數據庫中查找常量的使用情況
我有一個問題,我有一個SQL服務器數據庫。它有很多存儲過程和函數聲明。我正在尋找使用「115」,這恰好是付費代碼。我最初並沒有編寫所有的代碼,所以我正在尋找任何聲明常量的地方,或者直接使用字符串「115」。
有沒有辦法通過(存儲過程,函數,視圖)集來搜索常量的用法?如何在sql server數據庫中查找常量的使用情況
我有一個問題,我有一個SQL服務器數據庫。它有很多存儲過程和函數聲明。我正在尋找使用「115」,這恰好是付費代碼。我最初並沒有編寫所有的代碼,所以我正在尋找任何聲明常量的地方,或者直接使用字符串「115」。
SELECT * FROM sys.objects WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%115%'
這包括了約束等過了在sys.sql_modules省略sys.procedures
的SQL Server 2000:
USE AdventureWorks
GO
--Option 1
SELECT DISTINCT so.name
FROM syscomments sc
INNER JOIN sysobjects so ON sc.id=so.id
WHERE sc.TEXT LIKE '%Employee%'
GO
--Option 2
SELECT DISTINCT o.name ,o.xtype
FROM syscomments c
INNER JOIN sysobjects o ON c.id=o.id
WHERE c.TEXT LIKE '%Employee%'
GO
的SQL Server 2005:
http://blog.sqlauthority.com/2007/11/10/sql-server-2005-2000-search-string-in-stored-procedure/
同樣:
USE AdventureWorks
GO
--Searching for Empoloyee table
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%Employee%'
GO
--Searching for Empoloyee table and RateChangeDate column together
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%Employee%'
AND OBJECT_DEFINITION(OBJECT_ID) LIKE '%RateChangeDate%'
GO
這兩個例子都取自http://www.knowdotnet.com/articles/storedprocfinds.html
這個例子:
CREATE PROCEDURE Find_Text_In_SP
@StringToSearch varchar(100)
AS
SET @StringToSearch = '%' [email protected] + '%'
SELECT Distinct SO.Name
FROM sysobjects SO (NOLOCK)
INNER JOIN syscomments SC (NOLOCK) on SO.Id = SC.ID
AND SO.Type = 'P'
AND SC.Text LIKE @stringtosearch
ORDER BY SO.Name
GO
您可以搜索sys.sql_modules爲definition LIKE N'%115%'
:
SELECT sm.object_id, OBJECT_NAME(sm.object_id) AS object_name
, o.type, o.type_desc
FROM sys.sql_modules AS sm
JOIN sys.objects AS o ON sm.object_id = o.object_id
WHERE sm.definition LIKE N'%115%'
ORDER BY o.type;
你可能會得到一堆誤報,但至少你有一個起點。
+1比我的答案更加滑溜。它也可以在SQL Server 2000中工作嗎? – davek 2010-01-10 19:01:27
syscomments中是不可靠的:如果你的搜索字符串開頭爲3999的位置,它不會找到它,因爲文本列類型爲nvarchar (4000)。 – gbn 2010-01-10 18:59:56
好點 - 我忽略了! – davek 2010-01-10 19:03:35