我目前面临一种奇怪的情况。
我正在从查询中收集现有存储过程的代码到TMP
表。
表:
##SPListAndCode
(
Code nVarchar(MAX)
)
查询:
INSERT INTO ##SPListAndCode
SELECT OBJECT_DEFINITION (OBJECT_ID('SPname')))
之后我尝试将值替换为Create query,Alter query
REPLACE(CODE, 'CREATE PROCEDURE', 'ALTER PROCEDURE')
但问题是:REPLACE
函数没有替换值。
但是,当我尝试使用
时REPLACE(CODE, 'CREATE', 'ALTER')
功能按预期工作。
但这种情况对我来说是不可接受的,因为在存储过程中可能存在类似
的内容CREATE TABLE
内部示例数据" Code"柱:
/****** Object: StoredProcedure dbo.spName Script Date: 6/20/2016 9:10:18 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE dbo.spName
AS
DECLARE @pStartDate date, @x int
SET @pStartDate = (SELECT max(CT_ACTIVITY_DATE) FROM Table)
...
非常感谢您提供任何支持!
答案 0 :(得分:1)
您的存储过程在CREATE和PROCEDURE之间有两个空格,而您的替换是查找字符之间有一个空格的字符串。
答案 1 :(得分:0)
要访问存储过程中包含的实际代码,可以使用以下内容:
SELECT
so.name [ObjectName], so.type,
OBJECT_NAME(sc.id), sc.id, sc.colid , sc.[text]
FROM
sys.syscomments sc
INNER JOIN
sys.sysobjects so ON so.id = sc.id
WHERE
so.type = 'P'
ORDER BY
sc.id, sc.colid
注意每个对象可以有多个条目,colid用于对这些条目进行排序。