Sql Select-Query mit dynamischer Text-Variable
-
Freitag, 27. April 2012 07:20
Hi,
ich sitz hier an einem Problem und bin erstaunt, dass es nicht funktioniert:
declare @pNumberOfRecords int; declare @pRequestStatement varchar(200); declare @pYearKW varchar(6); set @pNumberOfRecords = 5; set @pRequestStatement =',ow.[AnzObjCall] as [Count] '; set @pYearKW = 201125; SELECT TOP (@pNumberOfRecords) oa.[ObjID], @pRequestStatement FROM [immo].[OAListe] oa WITH (NOLOCK) INNER JOIN Statistic.Relation_UID_ObjGuid uidoid ON uidoid.[ObjGuid] = oa.[DcGuid] INNER JOIN Statistic.Objects_Week ow ON ow.UniqueObjID = uidoid.UniqueObjID WHERE ow.yearkw = @pYearKW ORDER BY oa.[Plz] DESC, oa.[Ort] ;
Weiß jemand Rat wie ich @pRequestStatement in das Select-Statement einbinden kann und mir die Ausführung nicht den Text zurückgibt den ich da anfüge, sondern die Anzahl in Spalte Count?
Danke! :)
Alle Antworten
-
Freitag, 27. April 2012 07:33Moderator
Du begibst dich hier die Untiefen des Dynamischen SQL. Liese hierzu bitte vorher Erlands Artikel darüber.
Ich hoffe du weißt um die Problematik von WITH ( NOLOCK ) im speziellen mit COUNT().
Warum ist @YearKW ein VARCHAR(6)? Aus Sortierungsgründen sollte die erste KW 201101 sein. Damit wäre die Anzahl der Stellen immer gleich. Auch könnte man es so als INT speichern.
Ansonsten:
DECLARE @pNumberOfRecords INT = 5; DECLARE @pRequestStatement VARCHAR(200) = ',ow.[AnzObjCall] as [Count] '; DECLARE @pYearKW VARCHAR(6) = 201125; DECLARE @Sql NVARCHAR(MAX) = ' SELECT TOP ( @pNumberOfRecords ) oa.[ObjID] , ' + @pRequestStatement + ' FROM [immo].[OAListe] oa WITH ( NOLOCK ) INNER JOIN Statistic.Relation_UID_ObjGuid uidoid ON uidoid.[ObjGuid] = oa.[DcGuid] INNER JOIN Statistic.Objects_Week ow ON ow.UniqueObjID = uidoid.UniqueObjID WHERE ow.yearkw = @pYearKW ORDER BY oa.[Plz] DESC , oa.[Ort]; '; EXEC sp_executesql @Sql, N'@pNumberOfRecords INT, @pYearKW VARCHAR(6)', @pNumberOfRecords, @pYearKW;
- Als Antwort markiert Robert BreitenhoferMicrosoft Contingent Staff, Moderator Donnerstag, 10. Mai 2012 14:29
-
Freitag, 27. April 2012 07:54
ich sitz hier an einem Problem und bin erstaunt, dass es nicht funktioniert
Hallo,
und ich bin nicht erstaunt; wenn Du mit dynamischem SQL arbeiten willst, musst Du es auch ganz als dynamisches SQL umsetzten; hier als vereinfachtes Beispiel:
declare @pRequestStatement varchar(200); set @pRequestStatement =',ow.[object_id] as [Count] '; DECLARE @sql nvarchar(1000); SET @sql = N'SELECT ow.name ' + @pRequestStatement + N' FROM sys.tables AS ow'; EXEC sp_executesql @sql
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing- Als Antwort markiert Robert BreitenhoferMicrosoft Contingent Staff, Moderator Donnerstag, 10. Mai 2012 14:29
-
Donnerstag, 10. Mai 2012 14:29Besitzer
Hallo PowerMogli,
Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT

Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

