2012-03-16 10 views
0

私はストアドプロシージャのテキストを変数に格納します。 データは列に表示されていますが、データはALTER内でのみ必要です。 私はSQLでそれほど経験がありません。ありがとう。SQLはテキストの一部を選択します

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

。これを行う良い方法は、 "syscomments"を使ってデータを要求することです。 –

答えて

-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のSUBSTRINGLENLEFT、およびRIGHT機能で遊んでお勧めします。

また、機能を使用するときは、定義内にCREATE,BEGIN、またはENDの位置が見つかる可能性があります。

+0

笑、それは私がどこにいるのかわかります。 ALTERとその内容を取得するために部分文字列を使用する方法に鋭敏ではありません。あなたが私にいくつかのアイデアを与えることができれば、それは素晴らしいだろう。私はポジションに数値を与える以外に例を見つけることができませんでしたが、それは良くありません。 – Ber53rker

+0

私の編集を見てください:) – Khan

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

これを試してみてください:私はあなたが(私はsysobjectsのを参照してください)Microsoft SQL Serverを使用していると考えて

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 
関連する問題