Condividi tramite


SET ANSI_PADDING (Transact-SQL)

Si applica a: SQL Server Istanza gestita di SQL di Azure endpoint di analisi SQL di Azure Synapse Analytics Platform System (PDW) in Microsoft Fabric Warehouse 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 OFFe l'opzione ANSI_PADDING OFF di database sono deprecate. In SQL Server 2017 (14.x) e versioni successive, database SQL di Azure e Istanza gestita di SQL di Azure, 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 and Analytics Platform System (PDW).

SET ANSI_PADDING ON

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 (12.x) e versioni precedenti, vedere 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 colonne esistenti non sono interessate da una modifica successiva a questa impostazione.

Nota

ANSI_PADDING deve essere sempre impostato su ON.

La tabella seguente illustra gli effetti dell'impostazione SET ANSI_PADDING quando i valori vengono inseriti in colonne con tipi di dati 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 SET ANSI_PADDING è ON. Gli spazi vuoti finali nei valori di carattere inseriti nelle colonne varchar non vengono tagliati. Gli zeri finali nei valori binari inseriti nelle colonne varbinary non vengono tagliati. I valori non vengono riempiti 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 SET ANSI_PADDING è 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.

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.

ANSI_PADDING deve essere ON quando si creano o si modificano indici in colonne calcolate o viste indicizzate. Per altre informazioni sulle impostazioni dell'opzione SET necessarie per viste indicizzate e indici in colonne calcolate, vedere Considerazioni sull'uso delle istruzioni SET.

L'impostazione predefinita per 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 vengono impostati ANSI_PADDING ON automaticamente su durante la 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'impostazione predefinita per SET ANSI_PADDING è OFF per le connessioni dalle applicazioni della libreria di database.

L'impostazione SET ANSI_PADDING non influisce sui tipi di dati nchar, nvarchar, ntext, text, image, varbinary(max), varchar(max)e nvarchar(max). Visualizzano sempre il SET ANSI_PADDING ON comportamento. Ciò significa che gli spazi finali e gli zeri non vengono tagliati.

Quando ANSI_DEFAULTS è ON, ANSI_PADDING è abilitato.

L'impostazione di è definita in fase di ANSI_PADDING esecuzione o in fase di esecuzione e 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 su ANSI_PADDING 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

Impostare ora su ANSI_PADDING 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;