【发布时间】:2019-08-29 18:37:50
【问题描述】:
我有一个模式,我在其中定义了过程。此过程可以修改,并且应该在所有租户之间复制(我们有基于模式的租户)。主要思想是拥有某种模板化的过程,这些过程将在过程被修改后通过其他租户的模式自动更新。 为了写这个“复制”过程,我写了这样的东西:
DECLARE
@proc_name NVARCHAR(150) = 'ProcedureToCopy',
@proc_sql NVARCHAR(MAX),
@schema_name NVARCHAR(MAX) = 'test';
SELECT
@proc_sql = REPLACE(ROUTINE_DEFINITION, '[templates].', '['+@schema_name+'].')
FROM
INFORMATION_SCHEMA.ROUTINES
WHERE
ROUTINE_TYPE='PROCEDURE' AND
ROUTINE_NAME = @proc_name AND
ROUTINE_SCHEMA = 'templates'
PRINT(@proc_sql);
EXEC(@proc_sql);
但是我遇到了大程序(超过 17k 个符号)的问题。无法复制,因为NVARCHAR(MAX) 限制为 4k 符号,所以我的@proc_sql 被修剪并且不包含所有必需的过程定义。
任何人都可以建议我的问题的解决方案或其他方法吗?
【问题讨论】:
-
nvarchar(max) 最多可以存储 2GB 的数据(10 亿个双字节字符)。您的问题可能是由某处的隐式类型转换引起的。见stackoverflow.com/questions/12097670/…
标签: sql-server tsql stored-procedures