2017-11-20 1 views
0

Ich habe eine recht einfache SQL Server gespeicherte Prozedur mit 2 Eingabeparametern, ein Name, der nvarchar(100) ist und Ergebnisse, die nvarchar(max) ist.Gespeicherte SQL Server-Prozedur INSERT NVARCHAR (MAX) nicht speichern

Die gespeicherte Prozedur fügt nur einen Insert hinzu - mehr nicht.

INSERT INTO TableX (name, results) 
VALUES (@Name, @Results) 

Ergebnisse ist eine | getrennte Datei in einen String serialisiert. Wenn diese gespeicherte Prozedur ausgeführt wird, hat die Zeile in der Tabelle manchmal nur den Namen und die Ergebnisse sind leer. Keine SQL-Fehler Es ist nicht nur wegen der Länge der Ergebnisse, weil einige der Aufrufe, die funktionieren, länger sind als einige der Aufrufe, die leer enden. Ich habe festgestellt, dass einige der Einträge einfache Anführungszeichen enthalten, also habe ich einfache Anführungszeichen entfernt, und das hat nicht geholfen.

Irgendwelche Ideen? Hier

ist die gespeicherte Prozedur:

CREATE PROCEDURE [dbo].[tempdata_SaveMarketStatsToCache] 
    (@ScreenName NVARCHAR(100), 
    @Results NVARCHAR(MAX)) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    INSERT INTO TempData_MarketStatsCache (MarketStatsKey, Results) 
    VALUES (@ScreenName, @Results) 
END 

gespeicherte Prozedur wird von .NET aufgerufen. SQLDbType.NVarchar mit Länge -1

UPDATE: Ich vermute, dass es die Größe der Zeichenfolge ist, die übergeben wird. Die kleinste Zeichenfolge, die fehlschlägt, ist knapp 250K Zeichen. Dies ist OK für NVARCHAR (max), aber es scheint, dass während des INSERT etwas passiert.

UPDATE 2: Es stellte sich heraus, dass es ein Problem mit SQL Server Management Studio war. Ich habe mit der rechten Maustaste auf die Tabelle geklickt und 200 Zeilen bearbeiten gewählt. Dies zeigte die Spalte als leer für die Zeilen mit den großen Ergebnissen (über 200K Zeichen). Wenn ich einfach eine Abfrage ausgeführt habe, zeigten die Spaltenwerte.

+2

Wie rufen Sie Ihre gespeicherte Prozedur auf? Wie sieht das ganze Verfahren aus? Was ist 'LEN (Ergebnisse)' für eine "leere" Zeile? –

+0

Können Sie dies mit bestimmten Eingabewerten konsistent reproduzieren? –

+2

leer oder null? Wenn es leer scheint, gibt es vielleicht führende Leerzeichen. Kannst du den genauen proc und die Parameter, die du verwendest, die das Leerzeichen produzieren? – scsimon

Antwort

0

Es stellte sich heraus, dass es sich um ein SQL Server Management Studio-Problem handelte, das den Eindruck erweckte, dass Daten nicht eingefügt wurden. Siehe Update 2 in der Frage.

Verwandte Themen