我有一个生成XML的存储过程。它在DEV中运行良好,但在其他环境中,它会因以下异常消息而失败。
这对我来说是个新错误。我正在阅读关于这个问题的各种博客,但我不确定我是否完全理解它。任何建议将不胜感激。
由于
例外情况如下:
这是我的存储过程:
ALTER PROCEDURE [dbo].[usp_OutboundEventMessage_CREATE]
(@EventName NVARCHAR(200),
@Force bit = 0,
@TopicFilter NVARCHAR(100),
@EventContexts XML,
@MessageBody XML OUTPUT)
AS
BEGIN
SET NOCOUNT ON;
----------------------
-- DETECT FORAMATTING: ContextKey
----------------------
IF (SELECT @EventContexts.exist('(//Contexts)')) = 0
BEGIN
DECLARE @Contexts XML = '<Contexts>' + CONVERT(NVARCHAR(MAX), @EventContexts) + '</Contexts>';
SET @EventContexts = @Contexts;
END
----------------------
-- CREATE FORAMATTING: DataSource
----------------------
DECLARE @EmptyGuid UNIQUEIDENTIFIER = (SELECT CAST(0x0 AS UNIQUEIDENTIFIER));
DECLARE @DataSource XML = (SELECT (SELECT SERVERPROPERTY(N'MachineName')) AS '@machineName', (SELECT Name FROM sys.databases WHERE database_id = DB_ID()) FOR XML PATH('DataSource'))
DECLARE @Topic XML = (SELECT @TopicFilter AS Filter FOR XML PATH('Topic'))
----------------------
-- GENERATE: MessageBody
--
-- ATTRIBUTES: Are added through as simle columns (see below)
----------------------
SET @MessageBody = (SELECT
@EmptyGuid AS '@auditId',
CASE @Force WHEN 0 THEN 'false' ELSE 'true' END AS '@force',
GETUTCDATE() AS '@CreatedOn',
@DataSource,
@Topic,
Name = @EventName,
@EventContexts
FOR XML PATH('Event'))
END
答案 0 :(得分:1)
索引视图要求某些SET条件到位(无论如何它们都是推荐的设置)。存储过程应该在其下执行的设置在创建时被记录。如果这两个不匹配,并且您在过程中使用索引视图,则会出现此错误。
要解决此问题,请删除该过程,在会话中启用该设置,然后重新创建该过程。
答案 1 :(得分:1)
答案 2 :(得分:-1)
检查ANSI PADDING设置 https://msdn.microsoft.com/en-us/library/ms187403.aspx