我想查询使用中存在的一个数据库中,但不是在另一个INFORMATION_SCHEMA.ROUTINES存储过程定义的列表。

SELECT 
    t1.Routine_Definition
FROM
    [server1].MyDatabase.INFORMATION_SCHEMA.Routines t1 
LEFT JOIN
    [server2].MyDatabase.INFORMATION_SCHEMA.Routines t2 ON t1.Routine_Name = t2.Routine_Name
WHERE
    t2.Routine_Name is null

,点击 这给了我一个单行的查询定义,所以当我有这样的评论

--Some comment
SELECT Column
FROM Somewhere

在SQL被注释和我不能使用的定义来创建SP。

如何我分析这回用正确的换行符? 点击 要么 点击 有没有更好的办法(使用代码)?让这些脚本

有帮助吗?

解决方案

在存储过程中仅显示在Management Studio一行。如果运行结果的文本查询,使用下面,你会得到正确的换行符:

declare @sql varchar(8000) -- varchar(max) in SQL 2005+

SELECT 
        @sql = t1.Routine_Definition
FROM
        INFORMATION_SCHEMA.Routines t1 

print @sql

其他提示

DECLARE MY_CURSOR Cursor
FOR

SELECT 
        t1.Routine_Definition
FROM
        [server1].MyDatabase.INFORMATION_SCHEMA.Routines t1 
LEFT JOIN
        [server2].MyDatabase.INFORMATION_SCHEMA.Routines t2 ON t1.Routine_Name = t2.Routine_Name
WHERE
        t2.Routine_Name is null AND
        LEN(t1.Routine_Definition) < 4000



Open My_Cursor
DECLARE @sql VARCHAR(MAX) 

FETCH NEXT FROM MY_Cursor INTO @sql
While (@@FETCH_STATUS <> -1)
BEGIN
IF (@@FETCH_STATUS <> -2)

Print @sql

FETCH NEXT FROM MY_CURSOR INTO @sql
END
CLOSE MY_CURSOR
DEALLOCATE MY_CURSOR
GO

下面是我如何实现CK的解决方案...

的INFORMATION_SCHEMA视图只返回在定义中的第一4000个字符。 (理想情况下,你不会有SP是那么长),你会想脚本手动将这些或其他方式。

我觉得让你的存储过程的最简单方法是使用内置到SQL Server Management Studio中的导入/导出工具。从那里,您可以将存储过程对象导出到代码窗口,或者,你可以立即运行一个文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top