如何在表列中插入SQL脚本?
我有一个具有ntext数据类型的表列。我将不得不在列中插入整个函数或存储过程。
举个例子:sp_helptext'sp_TestProcedure'将返回存储过程的完整语法。如何在表中填充存储过程脚本。
我可以更改数据类型ntext或nvarchar(max)。实际的问题是,如何将脚本插入到列中?
这不是存储过程结果的插入。我正在寻找的脚本是在表中插入实际的存储过程(或)函数(或)视图
答案 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(以任何一种为准)。
如果要检索它,请使用常规的“选择”命令。
但是,我认为这不是存储函数的好方法。在文件系统内部通常是可行的。