Stored procedure in SQL Data WarehouseStored procedures in SQL Data Warehouse

SQL Data Warehouse supporta molte delle funzionalità Transact-SQL disponibili in SQL Server.SQL Data Warehouse supports many of the Transact-SQL features found in SQL Server. Ancora più importanti sono le funzionalità di scalabilità orizzontale specifiche, che si useranno per massimizzare le prestazioni della soluzione.More importantly there are scale out specific features that we will want to leverage to maximize the performance of your solution.

Tuttavia, per mantenere la scalabilità e le prestazioni di SQL Data Warehouse sono disponibili anche funzionalità e caratteristiche con differenze di comportamento e altra che non sono supportate.However, to maintain the scale and performance of SQL Data Warehouse there are also some features and functionality that have behavioral differences and others that are not supported.

Questo articolo illustra come implementare stored procedure in SQL Data Warehouse.This article explains how to implement stored procedures within SQL Data Warehouse.

Introduzione alle stored procedureIntroducing stored procedures

Le stored procedure sono un ottimo modo per incapsulare il codice SQL, archiviandolo vicino i dati nel data warehouse.Stored procedures are a great way for encapsulating your SQL code; storing it close to your data in the data warehouse. Incapsulando il codice in unità gestibili, stored procedure consentono agli sviluppatori di modularizzare le soluzioni, rendendo possibile un maggiore riutilizzo del codice.By encapsulating the code into manageable units stored procedures help developers modularize their solutions; facilitating greater re-usability of code. Ogni stored procedure può anche accettare parametri per essere ancora più flessibile.Each stored procedure can also accept parameters to make them even more flexible.

SQL Data Warehouse fornisce un'implementazione semplificata e ottimizzata delle stored procedure.SQL Data Warehouse provides a simplified and streamlined stored procedure implementation. La differenza principale rispetto a SQL Server è che la stored procedure non è codice precompilato.The biggest difference compared to SQL Server is that the stored procedure is not pre-compiled code. Nei data warehouse si è in genere meno preoccupati del tempo di compilazione.In data warehouses we are generally less concerned with the compilation time. È più importante che il codice della stored procedure sia ottimizzato nel modo corretto quando si lavora con grandi volumi di dati.It is more important that the stored procedure code is correctly optimised when operating against large data volumes. L'obiettivo consiste nel risparmiare ore, minuti e secondi, non millisecondi.The goal is to save hours, minutes and seconds not milliseconds. È quindi più utile pensare alle stored procedure come contenitori per la logica di SQL.It is therefore more helpful to think of stored procedures as containers for SQL logic.

Quando SQL Data Warehouse esegue la stored procedure, le istruzioni SQL vengono analizzate, convertite e ottimizzate in fase di esecuzione.When SQL Data Warehouse executes your stored procedure the SQL statements are parsed, translated and optimized at run time. Durante questo processo, ogni istruzione viene convertita in query distribuite.During this process each statement is converted into distributed queries. Il codice SQL effettivamente eseguito sui dati è diverso dalla query inviata.The SQL code that is actually executed against the data is different to the query submitted.

Annidamento di stored procedureNesting stored procedures

Quando la stored procedure chiamano altre stored procedure o eseguono istruzioni SQL dinamiche, la stored procedure interna o la chiamata al codice è detta annidata.When stored procedures call other stored procedures or execute dynamic sql then the inner stored procedure or code invocation is said to be nested.

SQL Data Warehouse supporta un massimo di 8 livelli di annidamento.SQL Data Warehouse support a maximum of 8 nesting levels. Questo comportamento è leggermente diverso rispetto a SQL Server.This is slightly different to SQL Server. In SQL Server i livelli di annidamento sono 32.The nest level in SQL Server is 32.

La chiamata alla stored procedure di livello superiore equivale al livello di annidamento 1.The top level stored procedure call equates to nest level 1

EXEC prc_nesting

Se la stored procedure effettua anche un'altra chiamata a EXEC, il livello di annidamento passerà a 2.If the stored procedure also makes another EXEC call then this will increase the nest level to 2

CREATE PROCEDURE prc_nesting
AS
EXEC prc_nesting_2  -- This call is nest level 2
GO
EXEC prc_nesting

Se la seconda procedura esegue quindi alcune istruzioni SQL dinamiche, il livello di annidamento passerà a 3.If the second procedure then executes some dynamic sql then this will increase the nest level to 3

CREATE PROCEDURE prc_nesting_2
AS
EXEC sp_executesql 'SELECT 'another nest level'  -- This call is nest level 2
GO
EXEC prc_nesting

Tenere presente che SQL Data Warehouse attualmente non supporta @@NESTLEVEL.Note SQL Data Warehouse does not currently support @@NESTLEVEL. Sarà necessario tenere traccia manualmente del livello di annidamento.You will need to keep a track of your nest level yourself. È improbabile che venga raggiunto il limite del livello di annidamento 8, ma in questo caso sarà necessario usare di nuovo il codice e renderlo "flat" in modo che rientri in tale limite.It is unlikely you will hit the 8 nest level limit but if you do you will need to re-work your code and "flatten" it so that it fits within this limit.

INSERT..EXECUTEINSERT..EXECUTE

SQL Data Warehouse non consente di usare il set di risultati di una stored procedure con un'istruzione INSERT.SQL Data Warehouse does not permit you to consume the result set of a stored procedure with an INSERT statement. Si può tuttavia un approccio alternativo.However, there is an alternative approach you can use.

Per un esempio di come eseguire questa operazione, fare riferimento all'articolo seguente sulle tabelle temporanee .Please refer to the following article on [temporary tables] for an example on how to do this.

LimitazioniLimitations

Esistono alcuni aspetti delle stored procedure Transact-SQL che non sono implementate in SQL Data Warehouse.There are some aspects of Transact-SQL stored procedures that are not implemented in SQL Data Warehouse.

Sono:They are:

  • Stored procedure temporaneetemporary stored procedures
  • Stored procedure numeratenumbered stored procedures
  • Stored procedure esteseextended stored procedures
  • Stored procedure CLRCLR stored procedures
  • Opzione di crittografiaencryption option
  • Opzione di replicareplication option
  • Parametri con valori di tabellatable-valued parameters
  • Parametri di sola letturaread-only parameters
  • Parametri predefinitidefault parameters
  • Contesti di esecuzioneexecution contexts
  • Istruzione returnreturn statement

Passaggi successiviNext steps

Per altri suggerimenti sullo sviluppo, vedere la panoramica dello sviluppo.For more development tips, see development overview.