如何在表列中插入SQL脚本?

时间:2018-11-26 21:17:19

标签: sql sql-server tsql

如何在表列中插入SQL脚本?

我有一个具有ntext数据类型的表列。我将不得不在列中插入整个函数或存储过程。

举个例子:sp_helptext'sp_TestProcedure'将返回存储过程的完整语法。如何在表中填充存储过程脚本。

我可以更改数据类型ntext或nvarchar(max)。实际的问题是,如何将脚本插入到列中?

这不是存储过程结果的插入。我正在寻找的脚本是在表中插入实际的存储过程(或)函数(或)视图

2 个答案:

答案 0 :(得分:4)

您可以查看sys.sql_modules,其中包含数据库对象的定义(代码)。

INSERT INTO [dbo].[some_table] ([schema_name], [object_name], [definition])
SELECT 
    OBJECT_SCHEMA_NAME([object_id]) [schema_name],
    OBJECT_NAME([object_id]) [object_name],
    [definition]
FROM sys.sql_modules
WHERE   OBJECT_SCHEMA_NAME([object_id]) = 'dbo'
    AND OBJECT_NAME([object_id]) = 'some_object'

更新:正如其他人所评论的那样,如果目的是维护版本历史记录,则使用其他一些源代码控制解决方案可能更有效。另外,如果您想跟踪数据库对象更改中的任何时间代码,则可以考虑实施DDL触发器。仅仅搜索“ ddl触发器以跟踪架构更改”就可以产生一些有希望的结果。

此外,我偶然发现了OBJECT_DEFINITION(),这可能会有所帮助:

SELECT OBJECT_DEFINITION(OBJECT_ID('dbo.spt_values'))

答案 1 :(得分:0)

脚本是文本。只需使用sql服务器具有的常规“插入”即可。

该脚本位于文件中时,您需要首先读取该文件的内容。这样做的方法取决于您使用的语言类型-c,c#,java或python(以任何一种为准)。

如果要检索它,请使用常规的“选择”命令。

但是,我认为这不是存储函数的好方法。在文件系统内部通常是可行的。