MSSQL widok, za mała zmienna lokalna do zapytania

0

Hej,

Chce napisac query które aktualizuje mi widok i 'połączy' ok 700 table. Wymyśliłem że połącze je poprzez UNION w jednym zapytaniu w pętli. Niestety jest ono tak długie że nie mieście się w zmiennej, maksymalny rozmiar zmiennej lokalnej to 4000 znaków, to zdecydowanei za mało. Nie mam pomysłów jak to rozwiązać.

DECLARE @StartDate AS DATETIME
DECLARE @EndDate AS DATETIME
DECLARE @CurrentDate AS DATETIME
DECLARE @tableName varchar(60)
DECLARE @tempName varchar(60)

DECLARE @query varchar(max)

SET @StartDate = '2018-01-01'
SET @EndDate = GETDATE()
SET @CurrentDate = @StartDate

SET @query = 'ALTER VIEW [HydAdmTnt] AS 
					  SELECT *
                      FROM [tnt_0000002016100123]'

WHILE (@CurrentDate < @EndDate)
BEGIN
		SET @tableName = '[tnt_000000'
		SET @tempName = REPLACE(CONVERT(VARCHAR(24),@CurrentDate,102),'.','');
		SET @tableName = @tableName + @tempName+'23]';

		SET @query = @query +  
					' UNION
					  SELECT *
                      FROM '+ @tableName

		SET @CurrentDate = convert(varchar(30), dateadd(day,1, @CurrentDate), 101);
END
0

Skąd limit 4000 znaków skoro używasz varchar(max) to da ci ok 134 milionów znaków utf-16?

sam pomysl takiego widoku wydaje się dość karkołomny, nie wiem ile masz danych w tych tabelach, ale zrobilym jedną i do niej w takiej petli dodawał rekordy z pojedynczych tabel i na tym "masterze" zrobił widok....

1

możesz zrobić najpierw widoki na każdy miesiąc a potem na całość z tych widoków :D

0

Danych nie jest dużo kilka tysięcy na tabele. Limit wyczytałem gdzieś w dokumentacji, i faktycznie zapytanie jest ucięte w połowie.

1

Mam wrażenie, że to co odczytujesz jako ucięcie zmiennej jest limitem w SSMS, to można ustawić w opcjach: Tools>Options>Query Results>SQL Server Results to Text Maximum number of characters displayed in each columns co i tak ma swoje ograniczenie do 8192 znaków: https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2012/ms178782(v=sql.110)

Obejście jest takie aby to wyświetlić jako xml:

select CAST('<root><![CDATA[' + @query + ']]></root>' AS XML)

Wtedy faktycznie zobaczysz całość zmiennej:

https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=64bef33a6e0619dd9c6a32501c018606

Tak jak pisałem wcześniej, popraw strukturę bo zabkranie Ci zasobów do wykonywania takiego zapytania...

1 użytkowników online, w tym zalogowanych: 0, gości: 1