2016-10-07 2 views
2

Ich habe eine gespeicherte Prozedur, die XML generiert. Es funktioniert gut in DEV, aber in anderen Umgebungen schlägt es mit der folgenden Ausnahmebedingungsnachricht fehl.Gespeicherte Prozedur schlägt fehl, da CONCAT_NULL_YIELDS_NULL nicht korrekt ist

Dies ist ein neuer Fehler für mich. Ich lese verschiedene Blogs zu dem Thema, aber ich bin mir nicht sicher, ob ich es schon vollständig verstanden habe. Jeder Rat würde geschätzt werden.

Dank

Die Ausnahme sieht wie folgt aus:

enter image description here

Das ist mein gespeicherte Prozedur:

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 

Antwort

1

Ich bin sicher, die Blogs, die Sie gelesen haben, erklären, was diese Einstellung macht und MSDN erklärt weiter.

beheben Ihr Problem Sie können an der Spitze Ihrer gespeicherten Prozedur die folgenden nur noch hinzufügen:

SET CONCAT_NULL_YIELDS_NULL ON 
+0

Es stellt sich heraus, dass die verschiedenen Umgebungen anders konfiguriert sind ... also ja ... Ich musste dies hinzufügen. Vielen Dank –

1

Indizierte Ansichten erfordern, dass bestimmte SET-Bedingungen vorhanden sind (sie sind ohnehin die empfohlenen Einstellungen). Die Einstellung, unter der eine gespeicherte Prozedur ausgeführt werden soll, wird beim Erstellen aufgezeichnet. Wenn diese beiden nicht übereinstimmen und Sie eine indizierte Sicht in der Prozedur verwenden, erhalten Sie diesen Fehler.

Um dies zu beheben, löschen Sie das Verfahren, aktivieren Sie die Einstellung in Ihrer Sitzung und erstellen Sie das Verfahren erneut.

Verwandte Themen