SnowConvert AI - Serveur SQL-Azure Synapse - ALTER

Référence de traduction pour toutes les instructions DDL qui sont précédées du mot-clé ALTER.

TABLE

Description

Modifie la définition d’une table en modifiant, ajoutant ou supprimant des colonnes et des contraintes. ALTER TABLE permet également de réaffecter et de reconstruire des partitions, ou de désactiver et d’activer des contraintes et des déclencheurs. (https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-table-transact-sql)

CHECK CONSTRAINT

Applies to
  • SQL Server

  • Azure Synapse Analytics

Description

Note

Certaines parties du code de sortie sont omises pour des raisons de clarté.

Lorsque la contrainte ajoutée dans le code Serveur SQL n’est pas du tout prise en charge dans Snowflake, SnowConvert AI commente l’instruction de contrainte de vérification, car elle n’est plus valide.

Modèles d’échantillons de sources

SQL Server

ALTER TABLE
    [Person].[EmailAddress] CHECK CONSTRAINT [FK_EmailAddress_Person_BusinessEntityID]
GO
Copy

Snowflake

!!!RESOLVE EWI!!! /*** SSC-EWI-0035 - CHECK STATEMENT NOT SUPPORTED ***/!!!
ALTER TABLE IF EXISTS Person.EmailAddress CHECK CONSTRAINT FK_EmailAddress_Person_BusinessEntityID;
Copy

Problèmes connus

    1. La CHECK CONSTRAINT non valide est commentée en laissant une instruction ALTER TABLE non valide.

ADD

Description

Note

Dans le serveur SQL, la clause ADD autorise plusieurs actions par ADD, alors que Snowflake n’autorise qu’une séquence d’actions de colonne ADD. Par conséquent, SnowConvert AI divise la clause ALTER TABLE ADD en instructions ALTER TABLE individuelles.

Il existe un sous-ensemble de fonctionnalités fournies par le mot-clé ADD, permettant l’ajout de différents éléments à la table cible. Il s’agit notamment des éléments suivants :

  • Définition de colonne

  • Définition de colonne calculée

  • Contrainte de table

  • Définition d’ensemble de colonnes

TABLE CONSTRAINT

Applies to
  • SQL Server

Note

Certaines parties du code de sortie sont omises pour des raisons de clarté.

Description

Spécifie les propriétés d’une contrainte PRIMARY KEY, FOREIGN KEY, UNIQUE, ou CHECK qui fait partie d’une nouvelle définition de colonne ajoutée à une table à l’aide de la commande ALTER TABLE. (https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-table-column-constraint-transact-sql)

La traduction des contraintes de colonne est relativement simple. Plusieurs parties de la syntaxe ne sont pas exigées ou ne sont pas prises en charge par Snowflake.

Ces parties comprennent :

  • CLUSTERED | NONCLUSTERED

  • WITH FILLFACTOR = fillfactor

  • WITH ( index_option [, ...n ] )

  • ON { partition_scheme_name ( partition\_column\_name ) | filegroup | "default" }

  • NOT FOR REPLICATION

  • CHECK [ NOT FOR REPLICATION ]

Syntaxe dans SQL Server

 [ CONSTRAINT constraint_name ]   
{   
    { PRIMARY KEY | UNIQUE }   
        [ CLUSTERED | NONCLUSTERED ]   
        (column [ ASC | DESC ] [ ,...n ] )  
        [ WITH FILLFACTOR = fillfactor   
        [ WITH ( <index_option>[ , ...n ] ) ]  
        [ ON { partition_scheme_name ( partition_column_name ... )  | filegroup | "default" } ]   
    | FOREIGN KEY   
        ( column [ ,...n ] )  
        REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]   
        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ NOT FOR REPLICATION ]   
    | CONNECTION
        ( { node_table TO node_table } 
          [ , {node_table TO node_table }]
          [ , ...n ]
        )
        [ ON DELETE { NO ACTION | CASCADE } ]
    | DEFAULT constant_expression FOR column [ WITH VALUES ]   
    | CHECK [ NOT FOR REPLICATION ] ( logical_expression )  
}
Copy

Syntaxe dans Snowflake

 inlineUniquePK ::=
  [ CONSTRAINT <constraint_name> ]
  { UNIQUE | PRIMARY KEY }
  [ [ NOT ] ENFORCED ]
  [ [ NOT ] DEFERRABLE ]
  [ INITIALLY { DEFERRED | IMMEDIATE } ]
  [ ENABLE | DISABLE ]
  [ VALIDATE | NOVALIDATE ]
  [ RELY | NORELY ]

 [ CONSTRAINT <constraint_name> ]
  { UNIQUE | PRIMARY KEY }
  [ [ NOT ] ENFORCED ]
  [ [ NOT ] DEFERRABLE ]
  [ INITIALLY { DEFERRED | IMMEDIATE } ]
  [ ENABLE | DISABLE ]
  [ VALIDATE | NOVALIDATE ]
  [ RELY | NORELY ]
Copy

Modèles d’échantillons de sources

Plusieurs instances ALTERTABLE

SQL Server
 -- PRIMARY KEY
ALTER TABLE
    [Person]
ADD
    CONSTRAINT [PK_EmailAddress_BusinessEntityID_EmailAddressID] PRIMARY KEY CLUSTERED (
        [BusinessEntityID] ASC,
        [EmailAddressID] ASC
    ) ON [PRIMARY]
GO

-- FOREING KEY TO ANOTHER TABLE
ALTER TABLE
    [Person].[EmailAddress] WITH CHECK
ADD
    CONSTRAINT [FK_EmailAddress_Person_BusinessEntityID] FOREIGN KEY([BusinessEntityID]) REFERENCES [Person].[Person] ([BusinessEntityID]) ON DELETE CASCADE
GO
Copy
Snowflake
 -- PRIMARY KEY
ALTER TABLE Person
ADD
    CONSTRAINT PK_EmailAddress_BusinessEntityID_EmailAddressID PRIMARY KEY (BusinessEntityID, EmailAddressID);

-- FOREING KEY TO ANOTHER TABLE
ALTER TABLE Person.EmailAddress
!!!RESOLVE EWI!!! /*** SSC-EWI-0035 - CHECK STATEMENT NOT SUPPORTED ***/!!!
WITH CHECK
ADD
    CONSTRAINT FK_EmailAddress_Person_BusinessEntityID FOREIGN KEY(BusinessEntityID) REFERENCES Person.Person (BusinessEntityID) ON DELETE CASCADE ;
Copy

DEFAULT avec contraintes

SQL Server
CREATE TABLE Table1
(
   COL_VARCHAR VARCHAR,
   COL_INT INT,
   COL_DATE DATE
);

ALTER TABLE
    Table1
ADD
    CONSTRAINT [DF_Table1_COL_INT] DEFAULT ((0)) FOR [COL_INT]
GO

ALTER TABLE
    Table1
ADD
    COL_NEWCOLUMN VARCHAR,
    CONSTRAINT [DF_Table1_COL_VARCHAR] DEFAULT ('NOT DEFINED') FOR [COL_VARCHAR]
GO

ALTER TABLE
    Table1
ADD
    CONSTRAINT [DF_Table1_COL_DATE] DEFAULT (getdate()) FOR [COL_DATE]    
GO
Copy
Snowflake
CREATE OR REPLACE TABLE Table1 (
   COL_VARCHAR VARCHAR DEFAULT ('NOT DEFINED'),
   COL_INT INT DEFAULT ((0)),
   COL_DATE DATE DEFAULT (CURRENT_TIMESTAMP() :: TIMESTAMP)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;

----** SSC-FDM-TS0020 - DEFAULT CONSTRAINT MAY HAVE BEEN ADDED TO TABLE DEFINITION **

--ALTER TABLE Table1
--ADD
--    CONSTRAINT DF_Table1_COL_INT DEFAULT ((0)) FOR COL_INT
                                                          ;

ALTER TABLE Table1
ADD COL_NEWCOLUMN VARCHAR;

----** SSC-FDM-TS0020 - DEFAULT CONSTRAINT MAY HAVE BEEN ADDED TO TABLE DEFINITION **

--ALTER TABLE Table1
--ADD
--CONSTRAINT DF_Table1_COL_VARCHAR DEFAULT ('NOT DEFINED') FOR COL_VARCHAR
                                                                        ;

----** SSC-FDM-TS0020 - DEFAULT CONSTRAINT MAY HAVE BEEN ADDED TO TABLE DEFINITION **

--ALTER TABLE Table1
--ADD
--    CONSTRAINT DF_Table1_COL_DATE DEFAULT (CURRENT_TIMESTAMP() :: TIMESTAMP) FOR COL_DATE
                                                                                         ;
Copy

Problèmes connus

1. DEFAULT n’est pris en charge qu’à l’intérieur de CREATE TABLE et ALTER TABLE ... ADD COLUMN

SQL Server prend en charge la définition d’une propriété DEFAULT dans une contrainte, alors que Snowflake ne le permet que lors de l’ajout d’une colonne via CREATE TABLE ou ALTER TABLE ... ADD COLUMN. Les propriétés DEFAULT dans la syntaxe ADD CONSTRAINT ne sont pas prises en charge et seront traduites en ALTER TABLE ALTER COLUMN.

EWIs connexes

  1. SSC-EWI-0035 : Instruction de contrôle non prise en charge.

  2. SSC-EWI-0040 : Instruction non prise en charge.

  3. SSC-FDM-TS0020 : La contrainte par défaut a été commentée et peut avoir été ajoutée à une définition de table.

CHECK

Applies to
  • SQL Server

Description

Note

Certaines parties du code de sortie sont omises pour des raisons de clarté.

Lorsque la clause CHECK se trouve dans l’instruction ALTER, SnowConvert AI commentera l’instruction entière, car elle n’est pas prise en charge.

Modèles d’échantillons de sources

SQL Server

ALTER TABLE dbo.doc_exd    
ADD CONSTRAINT exd_check CHECK NOT FOR REPLICATION (column_a > 1); 
Copy

Snowflake

!!!RESOLVE EWI!!! /*** SSC-EWI-0035 - CHECK STATEMENT NOT SUPPORTED ***/!!!
ALTER TABLE dbo.doc_exd
ADD CONSTRAINT exd_check CHECK NOT FOR REPLICATION (column_a > 1);
Copy

Problèmes connus

1. La clause ALTER TABLE CHECK n’est pas prise en charge par Snowflake.

La clause ALTER TABLE CHECK est entièrement commentée, car elle n’est pas prise en charge par Snowflake.

EWIs connexes

  • SSC-EWI-0035 : Instruction de contrôle non prise en charge.

CONNECTION

Applies to
  • SQL Server

Description

Note

Certaines parties du code de sortie sont omises pour des raisons de clarté.

Lorsque la clause CONNECTION se trouve dans l’instruction ALTER, SnowConvert AI commentera l’instruction entière, car elle n’est pas prise en charge.

Modèles d’échantillons de sources

SQL Server

ALTER TABLE bought 
ADD COL2 VARCHAR(32), CONSTRAINT EC_BOUGHT1 CONNECTION (Customer TO Product, Supplier TO Product) 
ON DELETE NO ACTION;
Copy

Snowflake

ALTER TABLE bought
ADD COL2 VARCHAR(32);

!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
ALTER TABLE bought
ADD
CONSTRAINT EC_BOUGHT1 CONNECTION (Customer TO Product, Supplier TO Product)
ON DELETE NO ACTION;
Copy

Problèmes connus

1. La clause ALTER TABLE CONNECTION n’est pas prise en charge par Snowflake.

La clause ALTER TABLE CONNECTION est entièrement commentée, car elle n’est pas prise en charge par Snowflake.

EWIs connexes

  • SSC-EWI-0109 : La syntaxe Alter Table n’est pas applicable dans Snowflake.

DEFAULT

Applies to
  • SQL Server

Description

Lorsque la clause DEFAULT se trouve dans l’instruction ALTER, SnowConvert AI commentera l’instruction entière, car elle n’est pas prise en charge.

Le seul scénario fonctionnel se produit lorsque la définition de la table se trouve dans le même fichier ; dans ce cas, la valeur par défaut est ajoutée dans la définition de la colonne.

Modèles d’échantillons de sources

SQL Server

CREATE TABLE table1
(
  col1 integer not null,
  col2 varchar collate Latin1_General_CS,
  col3 date not null
)

ALTER TABLE table1
ADD CONSTRAINT col1_constraint DEFAULT 50 FOR col1;

ALTER TABLE table1
ADD CONSTRAINT col2_constraint DEFAULT 'hello world' FOR col2;

ALTER TABLE table1
ADD CONSTRAINT col3_constraint DEFAULT getdate() FOR col3;
Copy

Snowflake

CREATE OR REPLACE TABLE table1 (
  col1 INTEGER not null DEFAULT 50,
  col2 VARCHAR COLLATE 'EN-CS' DEFAULT 'hello world',
  col3 DATE not null DEFAULT CURRENT_TIMESTAMP() :: TIMESTAMP
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;

----** SSC-FDM-TS0020 - DEFAULT CONSTRAINT MAY HAVE BEEN ADDED TO TABLE DEFINITION **

--ALTER TABLE table1
--ADD CONSTRAINT col1_constraint DEFAULT 50 FOR col1
                                                  ;

----** SSC-FDM-TS0020 - DEFAULT CONSTRAINT MAY HAVE BEEN ADDED TO TABLE DEFINITION **

--ALTER TABLE table1
--ADD CONSTRAINT col2_constraint DEFAULT 'hello world' FOR col2
                                                             ;

----** SSC-FDM-TS0020 - DEFAULT CONSTRAINT MAY HAVE BEEN ADDED TO TABLE DEFINITION **

--ALTER TABLE table1
--ADD CONSTRAINT col3_constraint DEFAULT CURRENT_TIMESTAMP() :: TIMESTAMP FOR col3
                                                                                ;
Copy

Problèmes connus

1. La clause ALTER TABLE DEFAULT n’est pas prise en charge par Snowflake.

La clause ALTER TABLE DEFAULT est entièrement commentée, car elle n’est pas prise en charge par Snowflake.

EWIs connexes

  1. SSC-FDM-TS0020 : La contrainte par défaut a été commentée et peut avoir été ajoutée à une définition de table.

FOREIGN KEY

Applies to
  • SQL Server

Description

Note

Certaines parties du code de sortie sont omises pour des raisons de clarté.

Snowflake prend en charge la grammaire des contraintes d’intégrité référentielle et leurs propriétés afin de faciliter la migration depuis d’autres bases de données.

SQL Server

FOREIGN KEY   
        ( column [ ,...n ] )  
        REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]   
        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ NOT FOR REPLICATION ]
Copy

Snowflake

  [ FOREIGN KEY ]
  REFERENCES <ref_table_name> [ ( <ref_col_name> ) ]
  [ MATCH { FULL | SIMPLE | PARTIAL } ]
  [ ON [ UPDATE { CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION } ]
       [ DELETE { CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION } ] ]
  [ [ NOT ] ENFORCED ]
  [ [ NOT ] DEFERRABLE ]
  [ INITIALLY { DEFERRED | IMMEDIATE } ]
  [ ENABLE | DISABLE ]
  [ VALIDATE | NOVALIDATE ]
  [ RELY | NORELY ]
Copy

Modèles d’échantillons de sources

SQL Server

ALTER TABLE [Tests].[dbo].[Employee]
ADD CONSTRAINT FK_Department FOREIGN KEY(DepartmentID) REFERENCES Department(DepartmentID) 
ON UPDATE CASCADE
ON DELETE NO ACTION
NOT FOR REPLICATION;
Copy

Snowflake

ALTER TABLE Tests.dbo.Employee
ADD CONSTRAINT FK_Department FOREIGN KEY(DepartmentID) REFERENCES Department (DepartmentID)
ON UPDATE CASCADE
ON DELETE NO ACTION;
Copy

Note

Les contraintes ne sont pas appliquées dans Snowflake, à l’exception de NOT NULL.

Les clés primaires et étrangères ne sont utilisées qu’à des fins de documentation et non de contraintes de conception.

ON PARTITION

Applies to
  • SQL Server

Note

Instruction non pertinente.

Avertissement

Notez que cette instruction est supprimée de la migration car la syntaxe n’est pas pertinente. Cela signifie qu’elle n’est pas nécessaire dans Snowflake.

Description

Note

Certaines parties du code de sortie sont omises pour des raisons de clarté.

Dans Transact SQL Server, l’instruction on partition est utilisée à l’intérieur des instructions alter et sert à diviser les données dans la base de données. Pour plus d’informations, cliquez ici.

Modèles d’échantillons de sources

On Partition

Notez que dans cet exemple, ON PARTITION a été supprimé. En effet, Snowflake fournit une méthodologie de partitionnement intégrée. La syntaxe n’est donc pas pertinente.

SQL SERVER
ALTER TABLE table_name
ADD column_name INTEGER
CONSTRAINT constraint_name UNIQUE
ON partition_scheme_name (partition_column_name);
Copy
Snowflake
ALTER TABLE table_name
ADD column_name INTEGER
CONSTRAINT constraint_name UNIQUE;
Copy

PRIMARY KEY

Applies to
  • SQL Server

Description

Note

Certaines parties du code de sortie sont omises pour des raisons de clarté.

La clé primaire de SQL Server comporte de nombreuses clauses qui ne sont pas applicables à Snowflake. La plupart des instructions seront donc commentées.

Syntaxe dans SQL Server

{ PRIMARY KEY | UNIQUE }   
[ CLUSTERED | NONCLUSTERED ]   
(column [ ASC | DESC ] [ ,...n ] )  
[ WITH FILLFACTOR = fillfactor   
[ WITH ( <index_option>[ , ...n ] ) ]  
[ ON { partition_scheme_name ( partition_column_name ... )  | filegroup | "default" } ]   
Copy

Syntaxe dans Snowflake

[ CONSTRAINT <constraint_name> ]
{ UNIQUE | PRIMARY KEY } ( <col_name> [ , <col_name> , ... ] )
[ [ NOT ] ENFORCED ]
[ [ NOT ] DEFERRABLE ]
[ INITIALLY { DEFERRED | IMMEDIATE } ]
[ ENABLE | DISABLE ]
[ VALIDATE | NOVALIDATE ]
[ RELY | NORELY ]
Copy

Modèles d’échantillons de sources

Avertissement

Notez que l’instruction WITH FILLFACTOR a été supprimée de la traduction car elle n’est pas pertinente dans la syntaxe Snowflake.

SQL Server

ALTER TABLE Production.TransactionHistoryArchive
   ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY 
   CLUSTERED (TransactionID)
   WITH (FILLFACTOR = 75, ONLINE = ON, PAD_INDEX = ON)
   ON "DEFAULTLOCATION";
Copy

Snowflake

ALTER TABLE Production.TransactionHistoryArchive
   ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY (TransactionID);
Copy

COLUMN DEFINITION

ALTER TABLE ADD column_name

Applies to
  • SQL Server

  • Azure Synapse Analytics

Note

Certaines parties du code de sortie sont omises pour des raisons de clarté.

Description

Spécifie les propriétés d’une colonne qui sont ajoutées à une table à l’aide de ALTER TABLE.

L’ajout d’une définition de colonne dans Snowflake présente quelques différences par rapport à SQL Server.

Par instance, plusieurs parties de la grammaire du serveur SQL ne sont pas nécessaires ou ne sont pas du tout prises en charge par Snowflake. Il s’agit notamment des éléments suivants :

En outre, d’autres parties sont partiellement prises en charge et nécessitent un développement supplémentaire pour permettre l’émulation correcte de la fonctionnalité d’origine. Plus précisément, nous parlons de la propriété MASKED WITH, qui sera abordée dans la section des modèles de cette page.

SQL Server

column_name <data_type>  
[ FILESTREAM ]  
[ COLLATE collation_name ]   
[ NULL | NOT NULL ]  
[
    [ CONSTRAINT constraint_name ] DEFAULT constant_expression [ WITH VALUES ]   
    | IDENTITY [ ( seed , increment ) ] [ NOT FOR REPLICATION ]   
]
[ ROWGUIDCOL ]   
[ SPARSE ]   
[ ENCRYPTED WITH  
  ( COLUMN_ENCRYPTION_KEY = key_name ,  
      ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED } ,   
      ALGORITHM =  'AEAD_AES_256_CBC_HMAC_SHA_256'   
  ) ]  
[ MASKED WITH ( FUNCTION = ' mask_function ') ]  
[ <column_constraint> [ ...n ] ]  
Copy

Snowflake

ADD [ COLUMN ] <col_name> <col_type>
        [ { DEFAULT <expr> | { AUTOINCREMENT | IDENTITY } [ { ( <start_num> , <step_num> ) | START <num> INCREMENT <num> } ] } ]
                            /* AUTOINCREMENT (or IDENTITY) supported only for columns with numeric data types (NUMBER, INT, FLOAT, etc.). */
                            /* Also, if the table is not empty (i.e. rows exist in the table), only DEFAULT can be altered.               */
        [ inlineConstraint ]
        [ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col1_name> , cond_col_1 , ... ) ] ]
Copy

Modèles d’échantillons de sources

Modèle de base

Ce modèle illustre la suppression d’éléments de ALTER TABLE d’origine.

SQL Server
ALTER TABLE table_name
ADD column_name INTEGER;
Copy
Snowflake
ALTER TABLE IF EXISTS table_name
ADD column_name INTEGER;
Copy

COLLATE

Le classement vous permet de spécifier des règles plus larges en matière de comparaison de chaînes.

SQL Server
ALTER TABLE table_name
ADD COLUMN new_column_name VARCHAR
COLLATE Latin1_General_CI_AS;
Copy

La nomenclature des règles de classement variant de SQL Server à Snowflake, il est nécessaire de procéder à des ajustements.

Snowflake
ALTER TABLE IF EXISTS table_name
ADD COLUMN new_column_name VARCHAR COLLATE 'EN-CI-AS' /*** SSC-PRF-0002 - CASE INSENSITIVE COLUMNS CAN DECREASE THE PERFORMANCE OF QUERIES ***/;
Copy

MASKED WITH

Ce modèle montre la traduction pour la propriété MASKED WITH. CREATE OR REPLACE MASKING POLICY est inséré quelque part avant la première utilisation, puis référencé par une clause SET MASKING POLICY.

Le nom de la nouvelle MASKING POLICY sera la concaténation du nom et des arguments de la MASKED WITH FUNCTION d’origine, comme présenté ci-dessous :

SQL Server
ALTER TABLE table_name
ALTER COLUMN column_name
ADD MASKED WITH ( FUNCTION = ' random(1, 999) ' );
Copy
Snowflake
--** SSC-FDM-TS0022 - MASKING ROLE MUST BE DEFINED PREVIOUSLY BY THE USER **
CREATE OR REPLACE MASKING POLICY "random_1_999" AS
(val SMALLINT)
RETURNS SMALLINT ->
CASE
WHEN current_role() IN ('YOUR_DEFINED_ROLE_HERE')
THEN val
ELSE UNIFORM(1, 999, RANDOM()) :: SMALLINT
END;

ALTER TABLE IF EXISTS table_name MODIFY COLUMN column_name/*** SSC-FDM-TS0021 - A MASKING POLICY WAS CREATED AS SUBSTITUTE FOR MASKED WITH ***/  SET MASKING POLICY "random_1_999";
Copy

DEFAULT

Ce modèle présente quelques-uns des scénarios de traduction de base pour la propriété DEFAULT.

SQL Server
ALTER TABLE table_name
ADD intcol INTEGER DEFAULT 0;

ALTER TABLE table_name
ADD varcharcol VARCHAR(20) DEFAULT '';

ALTER TABLE table_name
ADD datecol DATE DEFAULT CURRENT_TIMESTAMP;
Copy
Snowflake
ALTER TABLE IF EXISTS table_name
ADD intcol INTEGER DEFAULT 0;

ALTER TABLE IF EXISTS table_name
ADD varcharcol VARCHAR(20) DEFAULT '';

ALTER TABLE IF EXISTS table_name
ADD datecol DATE
                 !!!RESOLVE EWI!!! /*** SSC-EWI-TS0078 - DEFAULT OPTION NOT ALLOWED IN SNOWFLAKE ***/!!!
                 DEFAULT CURRENT_TIMESTAMP;
Copy

ENCRYPTED WITH

Ce modèle illustre la traduction de la propriété ENCRYPTED WITH, qui est commentée dans le code de sortie.

SQL Server
ALTER TABLE table_name
ADD encryptedcol VARCHAR(20)
ENCRYPTED WITH  
  ( COLUMN_ENCRYPTION_KEY = key_name ,  
      ENCRYPTION_TYPE = RANDOMIZED ,  
      ALGORITHM =  'AEAD_AES_256_CBC_HMAC_SHA_256'  
  );
Copy
Snowflake
ALTER TABLE IF EXISTS table_name
ADD encryptedcol VARCHAR(20)
----** SSC-FDM-TS0009 - ENCRYPTED WITH NOT SUPPORTED IN SNOWFLAKE **
--ENCRYPTED WITH
--  ( COLUMN_ENCRYPTION_KEY = key_name ,
--      ENCRYPTION_TYPE = RANDOMIZED ,
--      ALGORITHM =  'AEAD_AES_256_CBC_HMAC_SHA_256'
--  )
   ;
Copy

NOT NULL

La clause SQL Server NOT NULL a le même modèle et la même fonctionnalité que la clause Snowflake NOT NULL

SQL Server
ALTER TABLE table2 ADD 
column_test INTEGER NOT NULL,
column_test2 INTEGER NULL,
column_test3 INTEGER;
Copy
Snowflake
ALTER TABLE IF EXISTS table2 ADD column_test INTEGER NOT NULL;

ALTER TABLE IF EXISTS table2 ADD column_test2 INTEGER NULL;

ALTER TABLE IF EXISTS table2 ADD column_test3 INTEGER;
Copy

IDENTITY

Ce modèle illustre la traduction de IDENTITY. La partie NOT FOR REPLICATION est supprimée dans Snowflake.

SQL Server
ALTER TABLE table3 ADD 
column_test INTEGER IDENTITY(1, 100) NOT FOR REPLICATION;
Copy
Snowflake
ALTER TABLE IF EXISTS table3 ADD column_test INTEGER IDENTITY(1, 100) ORDER;
Copy

Clauses non prises en charge

FILESTREAM

Le comportement original de FILESTREAM n’est pas réplicable dans Snowflake, et mérite un commentaire sur toute l’instruction ALTER TABLE.

SQL Server
ALTER TABLE table2
ADD column1 varbinary(max)
FILESTREAM;
Copy
Snowflake
ALTER TABLE IF EXISTS table2
ADD column1 VARBINARY
!!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE 'FILESTREAM COLUMN OPTION' CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
FILESTREAM;
Copy

SPARSE

Dans SQL Server, SPARSE est utilisé pour définir des colonnes optimisées pour le stockage sur NULL. Toutefois, lorsque nous utilisons Snowflake, nous ne sommes pas tenus d’utiliser cette clause.

Snowflake effectue automatiquement des optimisations sur les tables, ce qui réduit la nécessité de procéder à des optimisations manuelles par l’utilisateur.

SQL Server
-- ADD COLUMN DEFINITION form
ALTER TABLE table3
ADD column1 int NULL SPARSE;

----------------------------------------
/* It also applies to the other forms */
----------------------------------------

-- CREATE TABLE form
CREATE TABLE table3
(
    column1 INT SPARSE NULL
);

-- ALTER COLUMN form
ALTER TABLE table3
ALTER COLUMN column1 INT NULL SPARSE;
Copy
Snowflake
-- ADD COLUMN DEFINITION form
ALTER TABLE IF EXISTS table3
ALTER COLUMN column1
                     !!!RESOLVE EWI!!! /*** SSC-EWI-TS0061 - ALTER COLUMN COMMENTED OUT BECAUSE SPARSE COLUMN IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
                     INT NULL SPARSE;

----------------------------------------
/* It also applies to the other forms */
----------------------------------------

-- CREATE TABLE form
CREATE OR REPLACE TABLE table3
(
    column1 INT
                !!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE 'SPARSE COLUMN OPTION' CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
                SPARSE NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;

-- ALTER COLUMN form
ALTER TABLE IF EXISTS table3
ALTER COLUMN column1
                     !!!RESOLVE EWI!!! /*** SSC-EWI-TS0061 - ALTER COLUMN COMMENTED OUT BECAUSE SPARSE COLUMN IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
                     INT NULL SPARSE;
Copy

ROWGUIDCOL

SQL Server
ALTER TABLE table_name
ADD column_name UNIQUEIDENTIFIER 
ROWGUIDCOL;
Copy
Snowflake
ALTER TABLE IF EXISTS table_name
ADD column_name VARCHAR
!!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE 'ROWGUIDCOL COLUMN OPTION' CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
ROWGUIDCOL;
Copy

Problèmes connus

1. Les rôles et les utilisateurs doivent être préalablement définis pour les politiques de masquage

Les politiques de masquage de Snowflake ne peuvent être appliquées aux colonnes qu’après la création des politiques. Pour que cela fonctionne correctement, l’utilisateur doit créer les politiques et les attribuer à des rôles, et ces rôles à des utilisateurs. Les politiques de masquage peuvent se comporter différemment selon l’utilisateur qui effectue la requête.

Avertissement

SnowConvert AI n’effectue pas cette configuration automatiquement.

2. Les politiques de masquage nécessitent un compte Snowflake Enterprise ou supérieur.

rang supérieurLa documentation Snowflake indique que les politiques de masquage sont disponibles sur les comptes Entreprise ou de rang supérieur.

Note

Pour plus de détails, consultez CREATE MASKING POLICY - Documentation Snowflake.

3. DEFAULT ne prend en charge que les valeurs constantes

La propriété DEFAULT de SQL Server est partiellement prise en charge par Snowflake, tant que sa valeur associée est une constante.

4. La clause FILESTREAM n’est pas prise en charge par Snowflake.

La clause FILESTSTREAM est entièrement commentée, car elle n’est pas prise en charge par Snowflake.

5. La clause SPARSE n’est pas prise en charge par Snowflake.

La clause SPARSE est entièrement commentée, car elle n’est pas prise en charge par Snowflake. Lorsqu’elle est ajoutée à une instruction ALTER COLUMN et qu’il s’agit de la seule modification apportée à la colonne, l’instruction entière est supprimée puisqu’il n’y a plus rien à ajouter.

EWIs connexes

  1. SSC-EWI-0040 : Instruction non prise en charge.

  2. SSC-EWI-TS0061 : ALTER COLUMN non pris en charge.

  3. SSC-EWI-TS0078 : Valeur par défaut non autorisée dans Snowflake.

  4. SSC-FDM-TS0009 : Encrypted with n’est pas pris en charge dans Snowflake.

  5. SSC-FDM-TS0021 : MASKING POLICY a été créé en remplacement de MASKED WITH.

  6. SSC-FDM-TS0022 : L’utilisateur doit préalablement définir le rôle de masquage.

  7. SSC-PRF-0002: Les colonnes insensibles à la casse peuvent diminuer les performances des requêtes.

COLUMN CONSTRAINT

ALTER TABLE ADD COLUMN … COLUMN CONSTRAINT

Applies to
  • SQL Server

  • Azure Synapse Analytics

Description

Spécifie les propriétés de PRIMARY KEY, FOREIGN KEY ou CHECK qui fait partie d’une nouvelle contrainte de colonne ajoutée à une table à l’aide de Alter Table.

SQL Server

[ CONSTRAINT constraint_name ]   
{   
    [ NULL | NOT NULL ]   
    { PRIMARY KEY | UNIQUE }   
        [ CLUSTERED | NONCLUSTERED ]   
        [ WITH FILLFACTOR = fillfactor ]   
        [ WITH ( index_option [, ...n ] ) ]  
        [ ON { partition_scheme_name (partition_column_name)   
            | filegroup | "default" } ]   
    | [ FOREIGN KEY ]   
        REFERENCES [ schema_name . ] referenced_table_name   
            [ ( ref_column ) ]   
        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ NOT FOR REPLICATION ]   
    | CHECK [ NOT FOR REPLICATION ] ( logical_expression )  
}  
Copy

Snowflake

CREATE TABLE <name> ( <col1_name> <col1_type>    [ NOT NULL ] { inlineUniquePK | inlineFK }
                     [ , <col2_name> <col2_type> [ NOT NULL ] { inlineUniquePK | inlineFK } ]
                     [ , ... ] )

ALTER TABLE <name> ADD COLUMN <col_name> <col_type> [ NOT NULL ] { inlineUniquePK | inlineFK }
Copy

Où :

inlineUniquePK ::=
  [ CONSTRAINT <constraint_name> ]
  { UNIQUE | PRIMARY KEY }
  [ [ NOT ] ENFORCED ]
  [ [ NOT ] DEFERRABLE ]
  [ INITIALLY { DEFERRED | IMMEDIATE } ]
  [ ENABLE | DISABLE ]
  [ VALIDATE | NOVALIDATE ]
  [ RELY | NORELY ]
Copy
inlineFK :=
  [ CONSTRAINT <constraint_name> ]
  [ FOREIGN KEY ]
  REFERENCES <ref_table_name> [ ( <ref_col_name> ) ]
  [ MATCH { FULL | SIMPLE | PARTIAL } ]
  [ ON [ UPDATE { CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION } ]
       [ DELETE { CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION } ] ]
  [ [ NOT ] ENFORCED ]
  [ [ NOT ] DEFERRABLE ]
  [ INITIALLY { DEFERRED | IMMEDIATE } ]
  [ ENABLE | DISABLE ]
  [ VALIDATE | NOVALIDATE ]
  [ RELY | NORELY ]
Copy

CHECK

Applies to
  • SQL Server

Description

Note

Certaines parties du code de sortie sont omises pour des raisons de clarté.

Lorsque la clause CHECK se trouve dans l’instruction ALTER, SnowConvert AI commentera l’instruction entière, car elle n’est pas prise en charge.

Modèles d’échantillons de sources

SQL Server

ALTER TABLE table_name
ADD column_name VARCHAR(255) 
CONSTRAINT constraint_name 
CHECK NOT FOR REPLICATION (column_name > 1);
Copy

Snowflake

ALTER TABLE IF EXISTS table_name
ADD column_name VARCHAR(255)
!!!RESOLVE EWI!!! /*** SSC-EWI-0035 - CHECK STATEMENT NOT SUPPORTED ***/!!!
CONSTRAINT constraint_name
CHECK NOT FOR REPLICATION (column_name > 1);
Copy

Problèmes connus

1. La clause ALTER TABLE CHECK n’est pas prise en charge par Snowflake.

La clause ALTER TABLE CHECK est entièrement commentée, car elle n’est pas prise en charge par Snowflake.

EWIs connexes

  • SSC-EWI-0035 : Instruction de contrôle non prise en charge.

FOREIGN KEY

Applies to
  • SQL Server

  • Azure Synapse Analytics

Description

La syntaxe de la clé étrangère est entièrement prise en charge par SnowFlake, à l’exception des clauses [ NOT FOR REPLICATION ] et WITH CHECK.

SQL Server

Pour plus d’informations, consultez la documentation SQL Server.

[ FOREIGN KEY ]  
REFERENCES [ schema_name . ] referenced_table_name  
[ ( ref_column ) ]  
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]  
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]  
[ NOT FOR REPLICATION ]
Copy

Snowflake

[ FOREIGN KEY ]
REFERENCES <ref_table_name> [ ( <ref_col_name> ) ]
[ MATCH { FULL | SIMPLE | PARTIAL } ]
[ ON [ UPDATE { CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION } ]
     [ DELETE { CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION } ] ]
[ [ NOT ] ENFORCED ]
[ [ NOT ] DEFERRABLE ]
[ INITIALLY { DEFERRED | IMMEDIATE } ]
[ ENABLE | DISABLE ]
[ VALIDATE | NOVALIDATE ]
[ RELY | NORELY ]
Copy

Modèles d’échantillons de sources

Cas général

SQL Server
ALTER TABLE dbo.student 
ADD CONSTRAINT Fk_empid FOREIGN KEY(emp_id)
REFERENCES dbo.emp(id);

ALTER TABLE dbo.student 
ADD CONSTRAINT Fk_empid FOREIGN KEY(emp_id)
REFERENCES dbo.emp(id)
NOT FOR REPLICATION;
Copy
Snowflake
ALTER TABLE dbo.student
ADD CONSTRAINT Fk_empid FOREIGN KEY(emp_id)
REFERENCES dbo.emp (id);

ALTER TABLE dbo.student
ADD CONSTRAINT Fk_empid FOREIGN KEY(emp_id)
REFERENCES dbo.emp (id);
Copy

Cas WITHCHECK / NOCHECK

Notez que la logique Snowflake ne prend pas en charge la clause CHECK dans la création des clés étrangères. L’instruction WITH CHECK est marquée comme n’étant pas prise en charge. Par ailleurs, la clause WITH NO CHECK est supprimée car il s’agit du comportement par défaut dans Snowflake et l’équivalence est la même.

Veuillez consulter les exemples suivants pour mieux comprendre la traduction.

SQL Server
ALTER TABLE testTable
WITH CHECK ADD CONSTRAINT testFK1 FOREIGN KEY (table_id)
REFERENCES otherTable (Othertable_id);

ALTER TABLE testTable
WITH NOCHECK ADD CONSTRAINT testFK2 FOREIGN KEY (table_id)
REFERENCES otherTable (Othertable_id);
Copy
Snowflake
ALTER TABLE testTable
----** SSC-FDM-0014 - CHECK STATEMENT NOT SUPPORTED **
--WITH CHECK
           ADD CONSTRAINT testFK1 FOREIGN KEY (table_id)
REFERENCES otherTable (Othertable_id);


ALTER TABLE testTable
ADD CONSTRAINT testFK2 FOREIGN KEY (table_id)
REFERENCES otherTable (Othertable_id);
Copy

Problèmes connus

1. Clause NOT FOR REPLICATION.

Snowflake a une approche différente des cas de réplication. Veuillez consulter la documentation suivante.

2. Clause WITHCHECK.

Snowflake ne prend pas en charge l’instruction WITH CHECK. Pour plus d’informations, consultez la documentation suivante.

PRIMARY KEY / UNIQUE

Applies to
  • SQL Server

  • Azure Synapse Analytics

Description

Toutes les clauses optionnelles de la contrainte PRIMARY KEY / UNIQUE sont supprimées dans Snowflake.

Syntaxe dans SQL Server

{ PRIMARY KEY | UNIQUE }
    [ CLUSTERED | NONCLUSTERED ]
    [ WITH FILLFACTOR = fillfactor ]
    [ WITH ( index_option [, ...n ] ) ]
    [ ON { partition_scheme_name (partition_column_name)
        | filegroup | "default" } ]
Copy

Modèles d’échantillons de sources

SQL Server

ALTER TABLE table_name
ADD column_name INTEGER
CONSTRAINT constraint_name UNIQUE;

ALTER TABLE table_name
ADD column_name INTEGER
CONSTRAINT constraint_name PRIMARY KEY
NONCLUSTERED;

ALTER TABLE table_name
ADD column_name INTEGER
CONSTRAINT constraint_name UNIQUE
WITH FILLFACTOR = 80;

ALTER TABLE table_name
ADD column_name INTEGER
CONSTRAINT constraint_name PRIMARY KEY
WITH (PAD_INDEX = off);

ALTER TABLE table_name
ADD column_name INTEGER
CONSTRAINT constraint_name UNIQUE
ON partition_scheme_name (partition_column_name);
Copy

Snowflake

ALTER TABLE table_name
ADD column_name INTEGER
CONSTRAINT constraint_name UNIQUE;


ALTER TABLE table_name
ADD column_name INTEGER
CONSTRAINT constraint_name PRIMARY KEY;


ALTER TABLE table_name
ADD column_name INTEGER
CONSTRAINT constraint_name UNIQUE;


ALTER TABLE table_name
ADD column_name INTEGER
CONSTRAINT constraint_name PRIMARY KEY;


ALTER TABLE table_name
ADD column_name INTEGER
CONSTRAINT constraint_name UNIQUE;
Copy