我希望将存储过程的文本存储到变量中。 我将数据显示在列中,但我只想要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'
答案 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的SUBSTRING,LEN,LEFT和RIGHT函数来完成剩下的工作。
此外,在使用这些功能时,您很可能希望在定义中找到CREATE
,BEGIN
和/或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包含程序内容!