Ich verwende eine EXEC-Anweisung und die OUTPUT ist immer NULL. Das ist ein Problem für mich. Ich brauche eine Möglichkeit, festzustellen, ob eine INSERT-Anweisung erfolgreich war oder nicht. Alternativ könnte ich den @bogusTable- und den INSERT-Teil der Abfrage entfernen und einfach testen, ob die zugrundeliegende SELECT-Anweisung irgendwelche Ergebnisse gesammelt hat, aber ich habe NULL immer auch auf diesem OUTPUT erhalten. HierSQL Server EXEC OUTPUT immer Null
ist die Abfrage:
SET @mainQuery = '
DECLARE @bogusTable TABLE(
someField VARCHAR(MAX) NULL
);
INSERT INTO @bogusTable SELECT someField FROM someTable WHERE anINT = ' @randINT
EXEC sp_executesql @mainQuery, N'@tempParam INT OUTPUT', @[email protected] OUTPUT
IF (@someInt IS NULL)
BEGIN
--This always executes even when the INSERT statement in @mainQuery doesn't insert anything
END
Das ist nicht, wie Sie '@ randINT' zu Ihrer ausgeführten SQL-Zugabe werden sollte. Wo setzen Sie einen Wert für '@ tempParam'? Ich sehe die Deklaration und die Erwartung der Ausgabe, aber wo in dem ausgeführten Skript gibt es einen Wert zu @ tempParam? – SqlZim
Und wenn Sie sich bemühen, 'sp_executesql' mit Parametern zu verwenden, warum machen Sie immer noch grobe String-Verkettungen, um den Wert von' @ randInt' in sie einzufügen? –
Wenn Sie eine DECLARE @tempParam INT über allem hinzufügen, wird immer NULL ausgegeben. Auch habe ich Gründe dafür, '@ mainQuery' zu benötigen, um' @ randInt' einzufügen, was den Rahmen dieser Frage sprengen würde. –