Ich übertrage Datenbank von SQL Server 2000 auf SQL Server 2008 R2 SP2 und alles funktioniert gut bis auf eine gespeicherte Prozedur. Der Fehler tritt in dem folgenden Code:Stored Procedure funktioniert auf SQL Server 2000, aber nicht auf SQL Server 2008R2
declare @Dates table (
ForDate smalldatetime,
DayStart int,
PRIMARY KEY CLUSTERED (ForDate)
)
INSERT INTO @Dates
SELECT M.ForDate
FROM @Master M
GROUP BY M.ForDate
Der Fehler ist:
Msg 213, Ebene 16, Status 1, Prozedur REP_Media, Linie 115
Spaltenname oder Anzahl der übergebenen Werte stimmt nicht mit der Tabellendefinition überein.
Ich erkannte, dass der Fehler auftritt, weil es keinen Wert für die Spalte DayStart
in der @Dates
Tabelle Größe zugeführt wird. Ich kann NULL in innere Auswahl hinzufügen und alles funktioniert gut.
Aber das gleiche Verfahren funktioniert auf SQL Server 2000 und nicht auf SQL Server 2008 R2 SP2, warum? Was sollte für den normalen Betrieb ohne Änderung der Prozedur (einige Serveroptionen oder andere Lösung) getan werden?
Ich versuche, SET ANSI_NULL_DFLT_ON ON
in Prozedurdefinition und in Datenbankoptionen zu verwenden, aber ohne Erfolg.
Nun, das ist einfach eine schlechte Übung, solche Anweisungen zu schreiben. Sie sollten immer die Spaltenliste angeben, wenn Sie eine Insert-Anweisung schreiben. –
Leider ist dies nicht mein Code, und solche Anforderungen können an anderer Stelle in der Anwendung auftreten, die die Datenbank verwendet. – Sergey