我有一个包含业务逻辑的存储过程。在它里面我有大约 1609 个变量(不要问我为什么,这就是引擎的工作原理)。我尝试将SET一个变量连接到所有其他变量的连接值。结果在创建过程中出现错误:
消息 8631,级别 17,状态 1,过程 XXX,行 YYY 内部错误:已达到服务器堆栈限制。请在您的查询中寻找潜在的深层嵌套,并尝试简化它。
我发现错误是由于我需要在SET操作中使用的变量数量。我可以通过将其一分为二来执行任务。
我的问题是这方面有一些限制吗?我查了查,但没有找到。
我们检查了此 KB 中描述的错误,但这不是我们的情况。我们不在CASE代码中使用任何表达式。我们使用该临时变量来准备必须使用 CLR 函数替换的值列表。我们将 SQL Server 更新为 SP3 CU6(最新的),但我们仍然遇到错误。
我的环境如下: VMWare 5.5激活服务器MS Windows Server 2008R2 Enterprise域和SQL Server 2008 R2 Enterprise。具有光纤通道连接的集中存储。
我的SQL Server DB. 我有 2 个file groups:一个带有实时数据 (FG1),第二个带有历史数据 (HDG)。
第二个文件组是read-only. 每个月我都会在分区中移动 - 我将新数据(来自上个月)添加到历史数据中。这个过程是自动的。
我们将数据库移至新服务器。最初,我必须手动完成该过程。在此操作期间,我的镜像出现故障(在操作 3 之后 - 请参阅下面的流程流程)并出现以下错误:
在主服务器上:
日志中的第 0 行:
Date 15.6.2015 20:54:11
Log SQL Server (Current - 16.6.2015 07:55:00)
Source spid84
Message
Setting database option MULTI_USER to ON for database MYDB.
Run Code Online (Sandbox Code Playgroud)
日志中的第 1 行:
Date 15.6.2015 20:54:11 …Run Code Online (Sandbox Code Playgroud) 我需要在完成之前从存储过程返回部分结果(作为简单的选择)。
有可能这样做吗?
如果是,如何做到这一点?
如果没有,有什么解决方法吗?
编辑:我有几个部分的程序。在第一部分我计算了几个字符串。我稍后会在过程中使用它们来进行附加操作。问题是调用者尽快需要字符串。因此,我需要计算该字符串并将其传回(不知何故,例如从选择中),然后继续工作。调用者更快地获得其有价值的字符串。
调用者是一个 Web 服务。
stored-procedures t-sql sql-server-2012 multi-thread web-service
我问了一个关于XML使用XSD schemainside验证的问题SQL Server 2012(见链接)。我明白(正如我怀疑的那样)我需要使用CLR Function. 该函数将获取XSD schema text并XML text进行验证。
我将有 1 个配置数据库和许多安装数据库。从那个角度来看,我想知道在哪里创建该功能 - 在配置数据库中还是在每个安装数据库中?
从支持的角度来看,最好只有一个 CLR 功能。
我有XML 结构,它是我的存储过程的输入参数。它包含带有& 的元素(在 XML 中转义)。当我提取该元素以VARCHAR接收& 时,它不是有效的 XML 字符。在再次转换为 XML 之前,我需要对其进行转义。如何做到这一点没有REPLACE?
我有以下文字:param1=xyz¶2=dasdasdfdas¶m3。它是查询字符串的一部分。我将其转换XML并作为 XML 结构的一部分发送:
<zzz xmlns="http://example.com">
<aaa>aaa</aaa>
<bbb>param1=xyz&para2=dasdasdfdas&param3</bbb>
</zzz>
Run Code Online (Sandbox Code Playgroud)
在存储过程中,我需要提取它。我这样做:
ISNULL(NULLIF(LTRIM(RTRIM(@XMLInput.value('declare default element namespace "http://example.com"; (zzz/bbb)[1]', 'NVARCHAR(250)'))), ''), '');
Run Code Online (Sandbox Code Playgroud)
之后,该值包含普通文本(& -s 未转义 - &)。
经过一些处理后,我需要将该字符串放入其他 XML 中。我做:
CAST( ... AS XML);
因为& -s 没有转义,所以我出错了。
我需要在 TSQL 中使用 XSD 验证 XML。为了使此任务半自动化,我需要在 TSQL 函数中执行此操作。
为了进行验证,我必须将值设置为 XML,如果它无效,我将收到一个错误。
我的问题是在 TSQL 函数内部我不能使用TRY / CATCH. 这是正确的方式吗,如果有可能做到这一点?
我的同事问我很简单,但对我来说很难的问题:
如果我deleted在INSTEAD OF触发器中有 10 条记录的表并且我删除了其中的 8 条记录,那么我deleted在AFTER触发器中的表中有多少条记录?
我认为它应该是 10,但我不确定。
我以非常模糊的方式提出问题,因为我无法用简短的句子解释我的问题是什么。
一般来说,我有一组转换文本和 XML 的过程。里面的程序,我有很多NVARCHAR和XML变量与表XML列。在我的数据中,我有特殊的字母(例如ò)。当我运行所有代码时,特殊字符消失并显示为?- 这意味着我得到了VARCHAR而不是NVARCHAR.
总的来说,我一切都好,直到最后的步骤。我得到了EXEC哪个调用存储过程具有类型为临时构造的变量NVARCHAR。我有一个包含XML字段的表。在这种情况下,我得到了?. 如果我手动运行程序(不在 中EXEC INTO),我会得到正确的符号。
任何想法为什么会发生这种情况?我检查了所有变量,它们是NVARCHAR.
t-sql ×5
xml ×4
sql-server ×3
functions ×2
sql-clr ×2
cast ×1
dynamic-sql ×1
errors ×1
mirroring ×1
multi-thread ×1
partitioning ×1
trigger ×1
unicode ×1
vmware ×1
web-service ×1