SnowConvert : Instructions Transact¶
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
[x] SQL Server
[x] 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 de SQL Server n’est pas du tout prise en charge par Snowflake, Snowconvert commente l’instruction de vérification de la contrainte, puisqu’elle n’est plus valide.
Modèles d’échantillons de sources¶
SQL Server¶
ALTER TABLE
[Person].[EmailAddress] CHECK CONSTRAINT [FK_EmailAddress_Person_BusinessEntityID]
GO
Snowflake¶
!!!RESOLVE EWI!!! /*** SSC-EWI-0035 - CHECK STATEMENT NOT SUPPORTED ***/!!!
ALTER TABLE IF EXISTS Person.EmailAddress CHECK CONSTRAINT FK_EmailAddress_Person_BusinessEntityID;
Problèmes connus¶
1. L’instruction invalide CHECK CONSTRAINT est commentée, ce qui laisse une instruction invalide ALTER TABLE.
ADD¶
Description¶
Note
Dans SQL Server, la clause ADD permet plusieurs actions par ADD, alors que Snowflake n’autorise qu’une séquence d’actions sur les colonnes ADD. Par conséquent, SnowConvert 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
[x] 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 = facteur de remplissage
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 )
}
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 ]
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
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 ;
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
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
;
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¶
SSC-EWI-0035 : Instruction de contrôle non prise en charge.
SSC-EWI-0040 : Instruction non prise en charge.
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
[x] 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 commente l’intégralité de l’instruction, 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);
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);
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
[x] 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 commente toute l’instruction, 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;
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;
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
[x] SQL Server
Description¶
Lorsque la clause DEFAULT se trouve dans l’instruction ALTER, Snowconvert commente toute l’instruction, 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;
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
;
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¶
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
[x] 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.
Syntaxe dans 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 ]
Syntaxe dans 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 ]
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;
Snowflake¶
ALTER TABLE Tests.dbo.Employee
ADD CONSTRAINT FK_Department FOREIGN KEY(DepartmentID) REFERENCES Department (DepartmentID)
ON UPDATE CASCADE
ON DELETE NO ACTION;
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.
Problèmes connus¶
Aucun problème n’a été trouvé
EWIs connexes¶
Pas d’EWIs connexes.
ON PARTITION¶
Applies to
[x] SQL Server
Note
Instruction non pertinente.
Avertissement
Remarquez que cette instruction est retirée de la migration parce qu’il s’agit d’une syntaxe non pertinente. Cela signifie qu’elle n’est pas exigée 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.
ALTER TABLE table_name
ADD column_name INTEGER
CONSTRAINT constraint_name UNIQUE
ON partition_scheme_name (partition_column_name);
ALTER TABLE table_name
ADD column_name INTEGER
CONSTRAINT constraint_name UNIQUE;
Problèmes connus ¶
Aucun problème n’a été constaté.
EWIs connexes ¶
Pas d’EWIs connexes.
PRIMARY KEY¶
Applies to
[x] 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" } ]
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 ]
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";
Snowflake¶
ALTER TABLE Production.TransactionHistoryArchive
ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY (TransactionID);
Problèmes connus¶
Aucun problème n’a été trouvé
EWIs connexes¶
Pas d’EWIs connexes.
COLUMN DEFINITION¶
Applies to
[x] SQL Server
[x] 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.
Syntaxe dans 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 ] ]
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 , ... ) ] ]
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;
Snowflake¶
ALTER TABLE IF EXISTS table_name
ADD column_name INTEGER;
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;
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 ***/;
MASKED WITH¶
Ce modèle illustre la traduction de 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 du nouveau MASKING POLICY sera la concaténation du nom et des arguments de MASKED WITH FUNCTION d’origine, comme ci-dessous :
SQL Server¶
ALTER TABLE table_name
ALTER COLUMN column_name
ADD MASKED WITH ( FUNCTION = ' random(1, 999) ' );
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";
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;
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;
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'
);
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'
-- )
;
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;
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;
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;
Snowflake¶
CREATE OR REPLACE SEQUENCE table3_column_test
START WITH 1
INCREMENT BY 100
COMMENT = 'FOR TABLE-COLUMN table3.column_test';
ALTER TABLE table3
ADD COLUMN column_test INTEGER DEFAULT table3_column_test.NEXTVAL ;
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;
Snowflake¶
ALTER TABLE IF EXISTS table2
ADD column1 VARBINARY
!!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
FILESTREAM;
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;
Snowflake¶
-- ADD COLUMN DEFINITION form
ALTER TABLE IF EXISTS table3
ADD column1 INT NULL
!!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE ***/!!! SPARSE;
----------------------------------------
/* It also applies to the other forms */
----------------------------------------
-- CREATE TABLE form
CREATE OR REPLACE TABLE table3
(
column1 INT
!!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE STATEMENT 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;
ROWGUIDCOL¶
SQL Server¶
ALTER TABLE table_name
ADD column_name UNIQUEIDENTIFIER
ROWGUIDCOL;
Snowflake¶
ALTER TABLE IF EXISTS table_name
ADD column_name VARCHAR
!!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
ROWGUIDCOL;
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.
SnowConvert 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¶
SSC-EWI-0040 : Instruction non prise en charge.
SSC-EWI-TS0061 : ALTER COLUMN non pris en charge.
SSC-EWI-TS0078 : Valeur par défaut non autorisée dans Snowflake.
SSC-FDM-TS0009 : Encrypted with n’est pas pris en charge dans Snowflake.
SSC-FDM-TS0021 : MASKING POLICY a été créé en remplacement de MASKED WITH.
SSC-FDM-TS0022 : L’utilisateur doit préalablement définir le rôle de masquage.
SSC-PRF-0002 : Les colonnes insensibles à la casse peuvent diminuer les performances des requêtes.
COLUMN CONSTRAINT¶
Applies to
[x] SQL Server
[x] 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.
Syntaxe dans 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 )
}
Syntaxe dans 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 }
Où :
inlineUniquePK ::=
[ CONSTRAINT <constraint_name> ]
{ UNIQUE | PRIMARY KEY }
[ [ NOT ] ENFORCED ]
[ [ NOT ] DEFERRABLE ]
[ INITIALLY { DEFERRED | IMMEDIATE } ]
[ ENABLE | DISABLE ]
[ VALIDATE | NOVALIDATE ]
[ RELY | NORELY ]
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 ]
CHECK¶
Applies to
[x] 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 commente l’intégralité de l’instruction, 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);
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);
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
[x] SQL Server
[x] 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
.
Syntaxe dans 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 ]
Syntaxe dans 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 ]
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;
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);
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);
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);
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.
EWIs connexes¶
Pas d’EWIs connexes.
PRIMARY KEY / UNIQUE¶
Applies to
[x] SQL Server
[x] 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" } ]
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);
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;
Problèmes connus ¶
Aucun problème n’a été constaté.
EWIs connexes¶
Pas d’EWIs connexes.
SET¶
ANSI_NULLS¶
Applies to
[x] SQL Server
[x] Azure Synapse Analytics
Description¶
Cette instruction spécifie le comportement conforme à la norme ISO des opérateurs de comparaison d’égalité et d’inégalité lorsqu’ils sont utilisés avec des valeurs nulles dans SQLServer. Veuillez consulter SET ANSI_NULLS pour obtenir de plus amples informations sur cette instruction.
Syntaxe Transact-SQL¶
SET ANSI_NULLS { ON | OFF }
Modèles d’échantillons de sources¶
SET ANSI_NULLS ON¶
« SET ANSI_NULLS ON n’affecte une comparaison que si l’un des opérandes de la comparaison est soit une variable qui est NULL soit un littéral NULL. Si les deux côtés de la comparaison sont des colonnes ou des expressions composées, le paramètre n’affecte pas la comparaison. » (article SQLServer ANSI_NULLS).
Snowflake ne prend pas en charge cette instruction, donc dans le cas de ANSI_NULLS ON, elle est marquée par un FDM (SSC-FDM-TS0027) parce qu’elle n’a pas d’importance dans l’exécution des opérations de comparaison d’égalité et d’inégalité . Vous trouverez ici une explication du traitement NULL dans Snowflake.
SQL Server¶
SET ANSI_NULLS ON;
Snowflake¶
----** SSC-FDM-TS0027 - SET ANSI_NULLS ON STATEMENT MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE **
--SET ANSI_NULLS ON
SET ANSI_NULLS OFF¶
« Lorsque ANSI_NULLS est OFF, les opérateurs de comparaison d’égalité (=
) et d’inégalité (<>
) ne respectent pas la norme ISO. Une instruction SELECT qui utilise WHERE column_name = NULL
renvoie les lignes dont la valeur est nulle dans la colonne column_name. Une instruction SELECT qui utilise WHERE column_name <> NULL
renvoie les lignes qui ont des valeurs non NULL dans la colonne ». (SQLServer ANSI_NULLS article).
Dans le cas de l’instruction ANSI_NULLS OFF, celle-ci est marquée d’un EWI (SSC-EWI-0040) parce qu’elle nécessite un effort manuel supplémentaire.
SQL Server¶
SET ANSI_NULLS OFF;
Snowflake¶
!!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
SET ANSI_NULLS OFF;
EWIs connexes¶
SSC-EWI-0040 : L’instruction n’est pas prise en charge par Snowflake
SSC-FDM-0027 : L’instruction SET ANSI_NULLS ON peut avoir un comportement différent dans Snowflake