Eine SELECT-Anweisung, die einer Variablen einen Wert zuweist, darf nicht mit Datenabrufoperationen kombiniert werden.

17/11/2010 - 13:35 von Gerd Haseloff | Report spam
Hallo,

ich versuche mich gerade an einer dynamisch zusammengesetzten SQL-
Abfrage, die letztendlich in
einer variablen PIVOT-Abfrage münden soll.


Ich verwende SQL Server 2000, alle SP, Access 2003

Die Syntaxüberprüfung wird erfolgreich abgeschlossen.
Bei der Ausführung der Abfrage erhalte ich folgende Fehlermeldung:

Meldung 141, Ebene 15, Status 1, Zeile 1
Eine SELECT-Anweisung, die einer Variablen einen Wert zuweist, darf
nicht mit Datenabrufoperationen kombiniert werden.



Ich verwende folgendes Script:


DECLARE @Aggregat_Funktion nvarchar(50)
DECLARE @Aggregat_Spalte1 nvarchar(255)
DECLARE @Aggregat_Spalte2 nvarchar(255)
DECLARE @Aggregat_Spalte3 nvarchar(255)
DECLARE @Ausgangstabelle nvarchar(255)
DECLARE @Ausgangstabelle1 nvarchar(255)
DECLARE @Select_Spalte1 nvarchar(255)
DECLARE @Select_Spalte2 nvarchar(255)
DECLARE @Pivot_Spalte1 nvarchar(255)
DECLARE @Pivot_Spalte2 nvarchar(255)

DECLARE @SQL_Anfang nvarchar(2000)
DECLARE @SQL_Liste nvarchar(4000)
DECLARE @SQL_Mitte nvarchar(4000)
DECLARE @SQL_Ende nvarchar(2000)

SET @Aggregat_Funktion = 'SUM'
SET @Aggregat_Spalte1 = 'tbl_essen.F' /*Erklàrung: (Datentyp bit)
SET @Aggregat_Spalte2 = 'tbl_essen.M' /*Erklàrung: (Datentyp = bit)
SET @Aggregat_Spalte3 = 'tbl_essen.A' /*Erklàrung: (Datentyp = bit)
SET @Ausgangstabelle = 'tbl_essen'
SET @Select_Spalte1 = 'tbl_lgtn.lgid'
SET @Select_Spalte2 = 'tbl_lgtn.nname'
SET @Pivot_Spalte1 = 'tbl_essen.[EDATUM]' /*Erklàrung: (Datentyp smalldatetime)
SET @Pivot_Spalte2 = 'tbl_essen.[EDATUM]'
SET @Ausgangstabelle1 = 'tbl_lgtn inner join tbl_essen on
tbl_lgtn.TNID = tbl_essen.TNID'
SET @SQL_Anfang = 'SELECT ' + @Select_Spalte1 + ', ' + @Select_Spalte2
+ ', '

SET @SQL_Liste = 'SELECT @Liste = ' +
' @Liste + ''' +

@Aggregat_Funktion + ' (CASE ' +
@Pivot_Spalte1 + ' WHEN '''''' + ' +
@Pivot_Spalte1 +
' + '''''' THEN ' +
@Aggregat_Spalte1 + ' ELSE 0 END) AS ' +
LEFT(@Pivot_Spalte1,5)+'_F' + ', ''' + ','+

@Aggregat_Funktion + ' (CASE ' +
@Pivot_Spalte1 + ' WHEN '''''' + ' +
@Pivot_Spalte1 +
' + '''''' THEN ' +
@Aggregat_Spalte2 + ' ELSE 0 END) AS ' +
LEFT(@Pivot_Spalte1,5)+'_M' + ', ''' + ','+

@Aggregat_Funktion + ' (CASE ' +
@Pivot_Spalte1 + ' WHEN '''''' + ' +
@Pivot_Spalte1 +
' + '''''' THEN ' +
@Aggregat_Spalte3 + ' ELSE 0 END) AS ' +
LEFT(@Pivot_Spalte1,5)+'_A' + ', ''' +
' FROM (SELECT DISTINCT TBL.ESSEN.EDATUM FROM ' + @Ausgangstabelle +
') V '

SET @SQL_Mitte = ''
EXEC sp_executesql @sql_liste, N'@Liste nvarchar(8000) OUTPUT', @Liste
= @SQL_Mitte OUTPUT

Ich würde mich freuen, wenn es jemand gàbe, der mir bei diesem
Problem weiterhelfen könnte!



Gerd
 

Lesen sie die antworten

#1 Karsten Schultz
19/11/2010 - 19:41 | Warnen spam
Am 17.11.2010 13:35, schrieb Gerd Haseloff:
Hallo,

ich versuche mich gerade an einer dynamisch zusammengesetzten SQL-
Abfrage, die letztendlich in
einer variablen PIVOT-Abfrage münden soll.


Ich verwende SQL Server 2000, alle SP, Access 2003

Die Syntaxüberprüfung wird erfolgreich abgeschlossen.
Bei der Ausführung der Abfrage erhalte ich folgende Fehlermeldung:

Meldung 141, Ebene 15, Status 1, Zeile 1
Eine SELECT-Anweisung, die einer Variablen einen Wert zuweist, darf
nicht mit Datenabrufoperationen kombiniert werden.



Ich verwende folgendes Script:


DECLARE @Aggregat_Funktion nvarchar(50)
DECLARE @Aggregat_Spalte1 nvarchar(255)
DECLARE @Aggregat_Spalte2 nvarchar(255)
DECLARE @Aggregat_Spalte3 nvarchar(255)
DECLARE @Ausgangstabelle nvarchar(255)
DECLARE @Ausgangstabelle1 nvarchar(255)
DECLARE @Select_Spalte1 nvarchar(255)
DECLARE @Select_Spalte2 nvarchar(255)
DECLARE @Pivot_Spalte1 nvarchar(255)
DECLARE @Pivot_Spalte2 nvarchar(255)

DECLARE @SQL_Anfang nvarchar(2000)
DECLARE @SQL_Liste nvarchar(4000)
DECLARE @SQL_Mitte nvarchar(4000)
DECLARE @SQL_Ende nvarchar(2000)

SET @Aggregat_Funktion = 'SUM'
SET @Aggregat_Spalte1 = 'tbl_essen.F' /*Erklàrung: (Datentyp > bit)
SET @Aggregat_Spalte2 = 'tbl_essen.M' /*Erklàrung: (Datentyp = bit)
SET @Aggregat_Spalte3 = 'tbl_essen.A' /*Erklàrung: (Datentyp = bit)
SET @Ausgangstabelle = 'tbl_essen'
SET @Select_Spalte1 = 'tbl_lgtn.lgid'
SET @Select_Spalte2 = 'tbl_lgtn.nname'
SET @Pivot_Spalte1 = 'tbl_essen.[EDATUM]' /*Erklàrung: (Datentyp > smalldatetime)
SET @Pivot_Spalte2 = 'tbl_essen.[EDATUM]'
SET @Ausgangstabelle1 = 'tbl_lgtn inner join tbl_essen on
tbl_lgtn.TNID = tbl_essen.TNID'
SET @SQL_Anfang = 'SELECT ' + @Select_Spalte1 + ', ' + @Select_Spalte2
+ ', '

SET @SQL_Liste = 'SELECT @Liste = ' +
' @Liste + ''' +

@Aggregat_Funktion + ' (CASE ' +
@Pivot_Spalte1 + ' WHEN '''''' + ' +
@Pivot_Spalte1 +
' + '''''' THEN ' +
@Aggregat_Spalte1 + ' ELSE 0 END) AS ' +
LEFT(@Pivot_Spalte1,5)+'_F' + ', ''' + ','+

@Aggregat_Funktion + ' (CASE ' +
@Pivot_Spalte1 + ' WHEN '''''' + ' +
@Pivot_Spalte1 +
' + '''''' THEN ' +
@Aggregat_Spalte2 + ' ELSE 0 END) AS ' +
LEFT(@Pivot_Spalte1,5)+'_M' + ', ''' + ','+

@Aggregat_Funktion + ' (CASE ' +
@Pivot_Spalte1 + ' WHEN '''''' + ' +
@Pivot_Spalte1 +
' + '''''' THEN ' +
@Aggregat_Spalte3 + ' ELSE 0 END) AS ' +
LEFT(@Pivot_Spalte1,5)+'_A' + ', ''' +
' FROM (SELECT DISTINCT TBL.ESSEN.EDATUM FROM ' + @Ausgangstabelle +
') V'

SET @SQL_Mitte = ''
EXEC sp_executesql @sql_liste, N'@Liste nvarchar(8000) OUTPUT', @Liste
= @SQL_Mitte OUTPUT

Ich würde mich freuen, wenn es jemand gàbe, der mir bei diesem
Problem weiterhelfen könnte!



Gerd




Hallo Gerd,

inhaltlich habe kann ich zu Deiner Abfrage im Augenblick nichts sagen.

Formal ist mir aufgefallen, dass Du viermal einen Kommentar mit /*
geöffnet hast, ohne ihn mit */ zu schließen. Es handelt sich um die
Zeilen, in denen Du den Datentyp erklàrst. Vielleicht ist das ja der Fehler.

Gruß Karsten

Ähnliche fragen