SQL选择文本的一部分

时间:2012-03-16 19:24:35

标签: sql sql-server stored-procedures

我希望将存储过程的文本存储到变量中。 我将数据显示在列中,但我只想要ALTER中的数据。 我不熟悉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'

4 个答案:

答案 0 :(得分: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的位置。

答案 1 :(得分: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

答案 2 :(得分: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

答案 3 :(得分:-1)

我认为您使用的是Microsoft SQL Server(sysobjects)。 为此,您需要询问数据“syscomments”:

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

Ctext包含程序内容!