Poniższe przykładowe zapytanie SQL umożliwia łatwe zbudowanie statycznej listy zmiennych na podstawie rekordów tabeli - poniższy przykład buduje rozdzielaną przecinkami listę na podstawie tabeli Tag. Przydatne przy konieczności wykonania zapytania o dane z historiana dla listy zmiennych które mamy w tabeli sql (nie możemy ich wynienić statycznie)
DECLARE
@List varchar(MAX) SET @List = '' SELECT @List = @List + ''''+CONVERT(varchar, Tag.TagName) + ''',' FROM Tag SELECT LEFT(@List, LEN(@List) - 1)
Przykład zapytania o historię zmiennych z wykorzystaniem dynamicznie skonstruowanej listy zmiennych:
declare
@sql nvarchar(Max) set @sql = 'DECLARE @StartDate VARCHAR(255) DECLARE @EndDate VARCHAR(255) set @StartDate = ''2019-03-24 00:00:00'' set @EndDate = ''2019-03-26 00:00:00'' SELECT temp.TagName, temp.DateTime, temp.Value, temp.Quality, temp1.zmienna FROM ( SELECT History.TagName, DateTime, Value, Quality FROM Runtime.dbo.History WHERE History.TagName IN (' + @List + ''''') AND vValue IS NOT NULL AND wwRetrievalMode = ''Average'' AND wwResolution = 60000 AND wwVersion = ''Latest'' AND DateTime >= CAST(@StartDate AS VARCHAR(10)) AND DateTime < CAST(@EndDate AS VARCHAR(10))) as temp INNER JOIN TableActiveTag_PP as temp1 ON temp.TagName=temp1.Zmienna'
exec
sp_executesql @sql
Słowa kluczowe : transpozycja, lista zmiennych, konwersja listy zmiennych, subquery