Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di cms9651
    Registrato dal
    Mar 2010
    Messaggi
    107

    SQL Server 2005 vs 2008 R2

    Ciao.

    Ho un problema con una query che utilizza la sintassi ROLLUP in SQL server.

    Sul mio server di sviluppo funziona correttamente mentre sul server di esercizio in hosting dà un errore sulla sintassi ROLLUP.

    E' forse un problema di versione?

    Infatti sul server di sviluppo questa è la versione di SQL Server:
    codice:
    Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86) Oct 14 2005 00:33:37   Copyright (c) 1988-2005 Microsoft Corporation  Standard Edition on Windows NT 6.1 (Build 7600: )
    Sul server di esercizio invece:
    codice:
    Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (Intel X86) Jun 17 2011 00:57:23 Copyright (c) Microsoft Corporation Express Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
    Non credo che il provider sia disposto ad aggiornare la sua versione... cosa posso fare?
    Serve postare la query in questione?

    Grazie

  2. #2

    Re: SQL Server 2005 vs 2008 R2

    posta query ed errore, credo sia il minimo

  3. #3
    Utente di HTML.it L'avatar di cms9651
    Registrato dal
    Mar 2010
    Messaggi
    107
    ok, grazie.

    L'errore sul server di esercizio è:
    codice:
    Messaggio 195, livello 15, stato 10, riga 137
    'ROLLUP' non è un valore riconosciuto di nome di funzione predefinita.
    Messaggio 195, livello 15, stato 10, riga 222
    'ROLLUP' non è un valore riconosciuto di nome di funzione predefinita.
    La query è questa, gli errori sul server di esercizio si verificano sulla riga dei ROLLUP:
    codice:
    CREATE TABLE TestTable (
    	[MAT] VARCHAR (100),
    	[NVE] INT,
    	[NVES] INT
    );
    
    INSERT INTO TestTable ([MAT], [NVE], [NVES]) SELECT
    	COALESCE ([MAT], 'Totale') AS [MAT],
    	[NVE],
    	[NVES]
    FROM
    	(
    		SELECT DISTINCT
    			CASE
    		WHEN LEFT (TZZ, 2) = 'AD'
    		OR LEFT (TZZ, 2) = 'AF' THEN
    			'MAO'
    		WHEN LEFT (TZZ, 2) = 'AG'
    		OR LEFT (TZZ, 2) = 'AH' THEN
    			'MAE'
    		WHEN LEFT (TZZ, 2) = 'AI'
    		OR LEFT (TZZ, 2) = 'AM'
    		OR LEFT (TZZ, 2) = 'AS'
    		OR LEFT (TZZ, 2) = 'AO' THEN
    			'MAC'
    		WHEN LEFT (TZZ, 2) = 'AP'
    		OR LEFT (TZZ, 2) = 'AQ'
    		OR LEFT (TZZ, 2) = 'AR' THEN
    			'MAS'
    		ELSE
    			'Totale'
    		END AS [MAT],
    		COUNT (*) AS [NVE],
    		SUM (
    			CASE
    			WHEN (
    				[R-M] = '1'
    				OR [R-M] = '2'
    				OR [R-M] = '3'
    				OR [R-M] = '4'
    			)
    			AND [DATA-V] IS NOT NULL THEN
    				1
    			ELSE
    				0
    			END
    		) AS [NVES]
    	FROM
    		dbo_40
    	WHERE
    		1 = 1
    	AND [TZZ] NOT LIKE 'LG%'
    	GROUP BY
    		ROLLUP (
    			CASE
    			WHEN LEFT (TZZ, 2) = 'AD'
    			OR LEFT (TZZ, 2) = 'AF' THEN
    				'MAO'
    			WHEN LEFT (TZZ, 2) = 'AG'
    			OR LEFT (TZZ, 2) = 'AH' THEN
    				'MAE'
    			WHEN LEFT (TZZ, 2) = 'AI'
    			OR LEFT (TZZ, 2) = 'AM'
    			OR LEFT (TZZ, 2) = 'AS'
    			OR LEFT (TZZ, 2) = 'AO' THEN
    				'MAC'
    			WHEN LEFT (TZZ, 2) = 'AP'
    			OR LEFT (TZZ, 2) = 'AQ'
    			OR LEFT (TZZ, 2) = 'AR' THEN
    				'MAS'
    			ELSE
    				'Totale'
    			END
    		)
    	) AS SubQs
    WHERE
    	1 = 1
    ORDER BY
    	CASE MAT
    WHEN 'MAO' THEN
    	1
    WHEN 'MAE' THEN
    	2
    WHEN 'MAC' THEN
    	3
    WHEN 'MAS' THEN
    	4
    ELSE
    	5
    END;
    
    SELECT
    	[MAT],
    	[NVE],
    	[NVES]
    FROM
    	(
    		SELECT
    			[MAT],
    			[NVE],
    			[NVES]
    		FROM
    			TestTable
    		UNION
    			SELECT
    				COALESCE ([MAT], 'Totale') AS [MAT],
    				SUM ([NVE]),
    				SUM ([NVES])
    			FROM
    				TestTable
    			GROUP BY
    				(mat)
    	) q
    ORDER BY
    	CASE MAT
    WHEN 'MAO' THEN
    	1
    WHEN 'MAE' THEN
    	2
    WHEN 'MAC' THEN
    	3
    WHEN 'MAS' THEN
    	4
    ELSE
    	5
    END;
    
    DROP TABLE TestTable;

  4. #4
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    La versione di SQL Server 2008 R2 che stai usando è la Express (mentre hai 2005 Standard)
    Mi vien da pensare che ROLLUP (che su google trovo legata a "cubi" ed affini) non sia supportata sulla versione Express che non ha nessuna delle funzionalità di analysis services, data mining, etc (mentre nella standard lo sono...)

    Se il tuo provider non ti mette a disposizione una versione standard temo tu ci possa fare ben poco...

  5. #5
    Utente di HTML.it L'avatar di cms9651
    Registrato dal
    Mar 2010
    Messaggi
    107
    Originariamente inviato da comas17
    La versione di SQL Server 2008 R2 che stai usando è la Express (mentre hai 2005 Standard)
    Mi vien da pensare che ROLLUP (che su google trovo legata a "cubi" ed affini) non sia supportata sulla versione Express che non ha nessuna delle funzionalità di analysis services, data mining, etc (mentre nella standard lo sono...)
    Si infatti, ho letto anche qui http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=165709

  6. #6
    Utente di HTML.it L'avatar di cms9651
    Registrato dal
    Mar 2010
    Messaggi
    107
    Risolto così:
    codice:
    GROUP BY
    		CASE
    		WHEN LEFT (TZZ, 2) = 'AD'
    		OR LEFT (TZZ, 2) = 'AF' THEN
    			'MAO'
    		WHEN LEFT (TZZ, 2) = 'AG'
    		OR LEFT (TZZ, 2) = 'AH' THEN
    			'MAE'
    		WHEN LEFT (TZZ, 2) = 'AI'
    		OR LEFT (TZZ, 2) = 'AM'
    		OR LEFT (TZZ, 2) = 'AS'
    		OR LEFT (TZZ, 2) = 'AO' THEN
    			'MAC'
    		WHEN LEFT (TZZ, 2) = 'AP'
    		OR LEFT (TZZ, 2) = 'AQ'
    		OR LEFT (TZZ, 2) = 'AR' THEN
    			'MAS'
    		ELSE
    			'Total'
    		END WITH ROLLUP

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.