SET ANSI_PADDING (Transact-SQL)

Si applica a:SQL Server Istanza gestita di SQL di Azure Azure Synapse Analytics AnalyticsPlatform System (PDW)SQL Analytics endpoint in Microsoft FabricWarehouse in Microsoft Fabric

Controlla il modo in cui la colonna archivia i valori di dimensioni inferiori a quelle definite della colonna e i valori contenenti spazi vuoti finali nei dati char, varchar, binarye varbinary .

Nota

SET ANSI_PADDING OFF e l'opzione di database ANSI_PADDING OFF sono deprecate. A partire da SQL Server 2017 (14.x), ANSI_PADDING è sempre impostato su ON. È consigliabile non usare le funzionalità deprecate nelle nuove applicazioni. Per altre informazioni, vedere Funzionalità di motore di database deprecate in SQL Server 2017.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

Sintassi per SQL Server, pool SQL serverless in Azure Synapse Analytics, Microsoft Fabric

SET ANSI_PADDING { ON | OFF }

Sintassi per Azure Synapse Analytics e piattaforma di strumenti analitici (PDW)

SET ANSI_PADDING ON

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 (12.x) e versioni precedenti, vedere la documentazione delle versioni precedenti.

Osservazioni:

Le colonne definite con i tipi di dati char, varchar, binary e varbinary hanno dimensioni definite.

Questa impostazione influisce solo sulla definizione di nuove colonne. Dopo la creazione della colonna, SQL Server archivia i valori in base all'impostazione specificata in fase di creazione. Le successive modifiche dell'impostazione non influiscono sulle colonne esistenti.

Nota

ANSI_PADDING deve essere sempre impostata su ON.

Nella tabella seguente vengono illustrati gli effetti dell'impostazione dell'opzione SET ANSI_PADDING quando i valori vengono inseriti in colonne con dati di tipo char, varchar, binary e varbinary.

Impostazione char(n) NOT NULL o binary(n) NOT NULL char(n) NULL o binary(n) NULL varchar(n) o varbinary(n)
ON Completa il valore originale con spazi vuoti finali in colonne di tipo char e con zeri finali in colonne di tipo binary in modo da riempire l'intera lunghezza della colonna. Segue le stesse regole di char(n) o binary(n)NOT NULL quando l'opzione SET ANSI_PADDING è impostata su ON. Gli spazi vuoti finali nei valori di tipo carattere inseriti in colonne di tipo varchar non vengono eliminati. Gli zeri finali in valori binari inseriti in colonne di tipo varbinary non vengono eliminati. I valori non vengono riempiti con caratteri nulli per l'intera lunghezza della colonna.
OFF Completa il valore originale con spazi vuoti finali in colonne di tipo char e con zeri finali in colonne di tipo binary in modo da riempire l'intera lunghezza della colonna. Segue le stesse regole di varchar o varbinary quando l'opzione SET ANSI_PADDING è impostata su OFF. Gli spazi vuoti finali in valori di tipo carattere inseriti in colonne di tipo varchar vengono eliminati. Gli zeri finali in valori binari inseriti in colonne di tipo varbinary vengono eliminati.

Nota

Durante l'operazione di riempimento le colonne di tipo char vengono riempite con spazi, mentre le colonne di tipo binary vengono riempite con zeri. Durante l'eliminazione, dalle colonne di tipo char vengono eliminati gli spazi vuoti finali, mentre dalle colonne di tipo binary vengono eliminati gli zeri finali.

È necessario che l'opzione ANSI_PADDING sia impostata su ON durante la creazione o la modifica di indici in colonne calcolate o viste indicizzate. Per altre informazioni sulle impostazioni dell'opzione SET necessarie per viste indicizzate e indici nelle colonne calcolate, vedere "Considerazioni sull'uso delle istruzioni SET" nell'argomento Istruzioni SET (Transact-SQL).

L'impostazione predefinita di SET ANSI_PADDING è ON. Il driver ODBC di SQL Server Native Client e il provider OLE DB di SQL Server Native Client per SQL Server impostano automaticamente l'opzione ANSI_PADDING su ON al momento della connessione. Questa può essere configurata nelle origini dati ODBC, negli attributi di connessione ODBC o nelle proprietà di connessione OLE DB impostate nell'applicazione prima della connessione. L'opzione predefinita per SET ANSI_PADDING è OFF per le connessioni di applicazioni DB-Library.

L'impostazione SET ANSI_PADDING non ha effetto sui tipi di dati nchar, nvarchar, ntext, text, image, varbinary(max), varchar(max) e nvarchar(max). Viene sempre applicata l'opzione SET ANSI_PADDING ON. Gli spazi vuoti e gli zero finali non vengono pertanto eliminati.

Quando l'opzione ANSI_DEFAULTS è impostata su ON, l'opzione ANSI_PADDING è abilitata.

L'impostazione di ANSI_PADDING viene definita in fase di esecuzione, non in fase di analisi.

Per visualizzare l'impostazione corrente per questa impostazione, eseguire la query riportata di seguito.

DECLARE @ANSI_PADDING VARCHAR(3) = 'OFF';  
IF ( (16 & @@OPTIONS) = 16 ) SET @ANSI_PADDING = 'ON';  
SELECT @ANSI_PADDING AS ANSI_PADDING;  

Autorizzazioni

È richiesta l'appartenenza al ruolo public .

Esempi

Nell'esempio seguente viene illustrato l'impatto dell'impostazione sui diversi tipi di dati.

Impostare ANSI_PADDING su ON e testare.

PRINT 'Testing with ANSI_PADDING ON'  
SET ANSI_PADDING ON;  
GO  
  
CREATE TABLE t1 (  
   charcol CHAR(16) NULL,   
   varcharcol VARCHAR(16) NULL,   
   varbinarycol VARBINARY(8)  
);  
GO  
INSERT INTO t1 VALUES ('No blanks', 'No blanks', 0x00ee);  
INSERT INTO t1 VALUES ('Trailing blank ', 'Trailing blank ', 0x00ee00);  
  
SELECT 'CHAR' = '>' + charcol + '\<', 'VARCHAR'='>' + varcharcol + '\<',  
   varbinarycol  
FROM t1;  
GO  

Ora impostare ANSI_PADDING su OFF e testare.

PRINT 'Testing with ANSI_PADDING OFF';  
SET ANSI_PADDING OFF;  
GO  
  
CREATE TABLE t2 (  
   charcol CHAR(16) NULL,   
   varcharcol VARCHAR(16) NULL,   
   varbinarycol VARBINARY(8)  
);  
GO  
INSERT INTO t2 VALUES ('No blanks', 'No blanks', 0x00ee);  
INSERT INTO t2 VALUES ('Trailing blank ', 'Trailing blank ', 0x00ee00);  
  
SELECT 'CHAR' = '>' + charcol + '\<', 'VARCHAR'='>' + varcharcol + '<',  
   varbinarycol  
FROM t2;  
GO  
  
DROP TABLE t1;  
DROP TABLE t2;