2012-03-16 45 views
0

我正在尋找將存儲過程的文本存儲到變量中。 我有數據出現在列中,但我只想要ALTER中的數據。 我不是那種經驗豐富的SQL,任何幫助,將不勝感激。謝謝。SQL select部分文本

SELECT ????????????????????? 
FROM sysobjects 
JOIN sys.sql_modules 
     ON  sysobjects.id = sys.sql_modules.object_id 
WHERE name = stored_procedure_name 

--The column's name is 'definition' 
+0

我認爲你是使用Microsoft SQL Server(我看到系統對象)。這樣做的好方法是使用「syscomments」來請求數據。 – 2012-03-16 19:30:55

回答

-1

我認爲你使用的是Microsoft SQL Server(sysobjects)。 要做到這一點,你需要問數據「的syscomments」:

select ctext from syscomments where id = object_id(N'procedurename') 

CTEXT包含程序內容!

0

可以存儲在文本到一個變量像這樣:

DECLARE @proctext NVARCHAR(MAX) 

SELECT @proctext = definition 
FROM sysobjects 
JOIN sys.sql_modules 
     ON  sysobjects.id = sys.sql_modules.object_id 
WHERE name = stored_procedure_name 

然後我建議使用SQL Server的SUBSTRINGLENLEFTRIGHT功能發揮得到休息。

另外,在使用函數時,您將很可能想要在定義中找到CREATEBEGIN和或END的位置。

+0

大聲笑,這幾乎是我在哪裏。不要熱衷於如何使用子字符串來獲取ALTER及其內容。如果你能給我一些想法,那會很好。除了給位置賦予數字值之外,我找不到任何例子,這對我沒有好處。 – Ber53rker 2012-03-16 19:36:59

+0

請參閱我的編輯:) – Khan 2012-03-16 19:47:33

0

這樣的事情可能會奏效。沒有測試過。需要使用SUBSTRING函數中使用的數字來獲得正確的結果。

SELECT SUBSTRING([definition], CHARINDEX([definition], 'alter', 0) + 5 , LEN([definition])) 
FROM sysobjects 
JOIN sys.sql_modules 
     ON  sysobjects.id = sys.sql_modules.object_id 
0

試試這個:

select ALTER_DEF=STUFF([definition],PATINDEX('%CREATE%',[definition]),6,'ALTER') 
from sys.sql_modules s 
inner join sys.procedures p on s.object_id=p.object_id