2008-09-16 5 views
1

Ich führe gespeicherte Prozeduren mit SET FMTONLY ON, um zu emulieren, was unser Code-Generator tut. Es scheint jedoch, dass die Ergebnisse im Cache gespeichert werden, wenn sie wie folgt ausgeführt werden, da ich immer noch eine Konvertierung Fehler Fehler von einem Proc, den ich gerade fallen gelassen habe! Dies passiert auch, wenn ich den Proc ohne SET FMTONLY ON ausführe.Problem mit SET FMTONLY ON

Kann mir bitte jemand sagen, was hier vor sich geht?

+2

Duh nicht funktionieren! Ich ließ FMTONLY auf ON stehen, und nichts, was ich in DDL getan hatte, schien irgendeinen Effekt zu haben. – ProfK

Antwort

1

Einige Aussagen werden nach wie vor mit SET FMTONLY ON ausgeführt werden, auch. Sie "Conversion failed" Fehler könnte von etwas so einfach wie eine set variable Anweisung im gespeicherten Proc sein. Zum Beispiel, geben diese die Metadaten für die erste Abfrage, sondern werfen eine Ausnahme, wenn es die letzte Anweisung lautet:

SET FMTONLY on 

select 1 as a 

declare @a int 
set @a = 'a' 

Wie für ein fiel Verfahren ausgeführt wird, das ist ein neuer zu mir. SQL Server verwendet die Systemtabellen, um das auszuführende Objekt zu bestimmen. Es spielt also keine Rolle, ob der Ausführungsplan für dieses Objekt zwischengespeichert wird. Wenn Sie es löschen, wird es aus den Systemtabellen gelöscht und sollte niemals ausführbar sein. Könnten Sie bitte sysobjects (oder sys.objects) kurz vor dem Ausführen der Prozedur abfragen? Ich nehme an, du wirst feststellen, dass du es nicht fallen gelassen hast.

0
  1. Das klingt wie ein clientseitiger Fehler. Erhalten Sie dieselbe Meldung, wenn Sie SQL Management Studio ausführen?

  2. Haben Sie bestätigt, dass es keine andere Prozedur mit demselben Namen gibt, die einem anderen Schema/Benutzer gehört?

0

DDL-Anweisungen werden analysiert, aber ignoriert, wenn sie ausgeführt werden, wenn SET FMTONLY ON für die Verbindung ausgeführt wurde. Wenn Sie also eine Prozedur, Tabelle usw. löschen, wenn FMTONLY aktiviert ist, wird die Anweisung analysiert, aber die Aktion wird nicht ausgeführt.

Versuchen Sie, diese

SET FMTONLY OFF 

--create Tabelle auf

CREATE TABLE TestTable (Column1 INT, Column2 INT) 

--insert 1 Datensatz

INSERT INTO TestTable (Column1, Column2) 
VALUES (1,2) 

--validate der Datensatz eingefügt wurde

zu testen, um zu überprüfen
SELECT * FROM TestTable 

--Jetzt Set-Format nur auf ON

SET FMTONLY ON 

--columns zurückgegeben werden, aber keine Daten

SELECT * FROM TestTable 

--perform DDL-Anweisung mit FMTONLY ON

DROP TABLE TestTable 

- -Schalten Sie FMTONLY wieder aus

SET FMTONLY OFF 

--Die Tisch war oben fallen gelassen, so sollte dies

SELECT * FROM TestTable 

DROP TABLE TestTable 

SELECT * FROM TestTable 
Verwandte Themen