Uso di stored procedure in SQL Data WarehouseUsing stored procedures in SQL Data Warehouse

Suggerimenti per l'implementazione delle stored procedure in Azure SQL Data Warehouse per lo sviluppo di soluzioni.Tips for implementing stored procedures in Azure SQL Data Warehouse for developing solutions.

Cosa aspettarsiWhat to expect

SQL Data Warehouse supporta molte delle funzionalità T-SQL che si usano in SQL Server.SQL Data Warehouse supports many of the T-SQL features that are used in SQL Server. Ancora più importanti sono le funzionalità di scale-out specifiche, che si possono usare per migliorare le prestazioni della soluzione.More importantly, there are scale-out specific features that you can use 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.

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. Le stored procedure consentono agli sviluppatori di rendere modulari le soluzioni incapsulando il codice in unità gestibili, facilitano così il riutilizzo del codice stesso.Stored procedures help developers modularize their solutions by encapsulating the code into manageable units; facilitating greater reusability 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 il tempo di compilazione è limitato rispetto al tempo necessario per eseguire query su grandi volumi di dati.In data warehouses, the compilation time is small in comparison to the time it takes to run queries against large data volumes. È più importante assicurarsi che il codice della stored procedure sia correttamente ottimizzato per le query di grandi dimensioni.It is more important to ensure the stored procedure code is correctly optimized for large queries. 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 eseguito sui dati è diverso dalla query inviata.The SQL code that is executed against the data is different than the query submitted.

Annidamento di stored procedureNesting stored procedures

Quando le stored procedure chiamano altre stored procedure o eseguono istruzioni SQL dinamiche, la stored procedure o la chiamata di codice interna è 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 otto livelli di annidamento.SQL Data Warehouse supports a maximum of eight 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 di stored procedure di massimo livello 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 EXEC, il livello di annidamento aumenta a due.If the stored procedure also makes another EXEC call, the nest level increases to two.

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

Se la seconda routine esegue poi istruzioni in SQL dinamico, il livello di annidamento aumenterà a tre.If the second procedure then executes some dynamic SQL, the nest level increases to three.

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. È necessario tenere traccia del livello di annidamento.You need to track the nest level. È improbabile superare il limite di otto livelli di annidamento, ma se lo si fa, è necessario rielaborare il codice per adattare i livelli di annidamento entro tale limite.It is unlikely for you to exceed the eight nest level limit, but if you do, you need to rework your code to fit the nesting levels 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, vedere l'articolo sulle tabelle temporanee.For an example, see the article on temporary tables.

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.