SnowConvert AI – SQL Server – Azure Synapse – CREATE TABLE¶
Applies to
SQL Server
Azure Synapse Analytics
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Grundlegende CREATE TABLE-Anweisung¶
Quelle¶
CREATE TABLE [MYSCHEMA].[MYTABLE]
(
[COL1] INT IDENTITY (1,1) NOT NULL,
[COL2] INT,
[COL2 COL3 COL4] VARCHAR,
[COL VARCHAR_SPANISH] [VARCHAR](20) COLLATE Modern_Spanish_CI_AI DEFAULT 'HOLA',
[COL VARCHAR_LATIN] [VARCHAR](20) COLLATE Latin1_General_CI_AI DEFAULT 'HELLO'
);
Erwartet¶
CREATE OR REPLACE TABLE MYSCHEMA.MYTABLE
(
COL1 INT IDENTITY(1,1) ORDER NOT NULL,
COL2 INT,
"COL2 COL3 COL4" VARCHAR,
"COL VARCHAR_SPANISH" VARCHAR(20) COLLATE 'ES-CI-AI' /*** SSC-PRF-0002 - CASE INSENSITIVE COLUMNS CAN DECREASE THE PERFORMANCE OF QUERIES ***/ DEFAULT 'HOLA',
"COL VARCHAR_LATIN" VARCHAR(20) COLLATE 'EN-CI-AI' /*** SSC-PRF-0002 - CASE INSENSITIVE COLUMNS CAN DECREASE THE PERFORMANCE OF QUERIES ***/ DEFAULT 'HELLO'
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "07/02/2025", "domain": "no-domain-provided" }}'
;
TEMPORARY TABLES¶
Im Quellcode kann es einige Tabellennamen geben, die mit dem Zeichen # beginnen.
CREATE TABLE #MyLocalTempTable (
COL1 INT,
COL2 INT
);
Wenn das der Fall ist, werden sie im Ausgabecode in temporäre Tabellen umgewandelt.
Schauen wir uns an, wie der Code von oben migriert werden würde.
CREATE OR REPLACE TEMPORARY TABLE T_MyLocalTempTable (
COL1 INT,
COL2 INT
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
Wie Sie sehen können, wurde TEMPORARY zur Definition der Tabelle hinzugefügt und das Zeichen # wurde durch T_ ersetzt.
Außerdem werden alle Verweise auf die Tabelle umgewandelt, damit sie dem neuen Namen der temporären Tabelle entsprechen.
NULL- und NOT NULL-Spaltenoption¶
NULL- und NOT NULL-Spaltenoptionen werden in Snowflake unterstützt.
Quelle¶
CREATE TABLE [SCHEMA1].[TABLE1](
[COL1] [varchar](20) NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [SCHEMA1].[TABLE2](
[COL1] [varchar](20) NULL
) ON [PRIMARY]
GO
Erwartet¶
CREATE OR REPLACE TABLE SCHEMA1.TABLE1 (
COL1 VARCHAR(20) NOT NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
CREATE OR REPLACE TABLE SCHEMA1.TABLE2 (
COL1 VARCHAR(20) NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
IDENTITY-Spaltenoption¶
Für Identitätsspalten wird eine Sequenz erstellt und der Spalte zugewiesen.
Quelle¶
CREATE TABLE acct3.UnidentifiedCash3 (
UnidentifiedCash_ID3 INT IDENTITY (666, 313) NOT NULL
);
Erwartet¶
CREATE OR REPLACE TABLE acct3.UnidentifiedCash3 (
UnidentifiedCash_ID3 INT IDENTITY(666, 313) ORDER NOT NULL
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "07/02/2025", "domain": "no-domain-provided" }}'
;
DEFAULT-Spaltenoption¶
Standardausdruck wird in Snowflake unterstützt, in SQL Server kann er jedoch zusammen mit einem Namen für eine Einschränkung auftreten. Da dieser Teil in Snowflake nicht unterstützt wird, wird er entfernt und eine Warnung hinzugefügt.
Quelle¶
CREATE TABLE [SCHEMA1].[TABLE1] (
[COL1] VARCHAR (10) CONSTRAINT [constraintName] DEFAULT ('0') NOT NULL
);
Erwartet¶
CREATE OR REPLACE TABLE SCHEMA1.TABLE1 (
COL1 VARCHAR(10) DEFAULT ('0') /*** SSC-FDM-0012 - CONSTRAINT NAME 'constraintName' IN DEFAULT EXPRESSION CONSTRAINT IS NOT SUPPORTED IN SNOWFLAKE ***/ NOT NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
COLUMN-Einschränkung¶
Quelle¶
CREATE TABLE [SalesLT].[Address](
[AddressID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[AddressLine1] [nvarchar](60) NOT NULL,
[AddressLine2] [nvarchar](60) NULL,
[City] [nvarchar](30) NOT NULL,
[StateProvince] [dbo].[Name] NOT NULL,
[CountryRegion] [dbo].[Name] NOT NULL,
[PostalCode] [nvarchar](15) NOT NULL,
[rowguid] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[ModifiedDate] [datetime] NOT NULL,
CONSTRAINT [PK_Address_AddressID] PRIMARY KEY CLUSTERED
(
[AddressID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY],
CONSTRAINT [AK_Address_rowguid] UNIQUE NONCLUSTERED
(
[rowguid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
Erwartet¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "[dbo].[Name]" **
CREATE OR REPLACE TABLE SalesLT.Address (
AddressID INT IDENTITY(1,1) ORDER NOT NULL,
AddressLine1 VARCHAR(60) NOT NULL,
AddressLine2 VARCHAR(60) NULL,
City VARCHAR(30) NOT NULL,
StateProvince VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-TS0015 - DATA TYPE DBO.NAME IS NOT SUPPORTED IN SNOWFLAKE ***/!!! NOT NULL,
CountryRegion VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-TS0015 - DATA TYPE DBO.NAME IS NOT SUPPORTED IN SNOWFLAKE ***/!!! NOT NULL,
PostalCode VARCHAR(15) NOT NULL,
rowguid VARCHAR
!!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE 'ROWGUIDCOL COLUMN OPTION' CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
ROWGUIDCOL NOT NULL,
ModifiedDate TIMESTAMP_NTZ(3) NOT NULL,
CONSTRAINT PK_Address_AddressID PRIMARY KEY (AddressID),
CONSTRAINT AK_Address_rowguid UNIQUE (rowguid)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "09/01/2025", "domain": "no-domain-provided" }}'
;
COLLATE-Spaltenoption¶
Weitere Informationen zur Transformation mit COLLATE finden Sie unter dem folgenden Link.
ENCRYPTED WITH-Spaltenoption¶
„Encrypted With“ wird in Snowflake nicht unterstützt, daher wird es entfernt und eine Warnung hinzugefügt.
Quelle¶
CREATE TABLE [SCHEMA1].[TABLE1] (
[COL1] NVARCHAR(60) ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = MyCEK, ENCRYPTION_TYPE = RANDOMIZED, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256')
);
Erwartet¶
CREATE OR REPLACE TABLE SCHEMA1.TABLE1 (
COL1 VARCHAR(60)
-- --** SSC-FDM-TS0009 - ENCRYPTED WITH NOT SUPPORTED IN SNOWFLAKE **
-- ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = MyCEK, ENCRYPTION_TYPE = RANDOMIZED, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256')
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
NOT FOR REPLICATION¶
Die Option NOT FOR REPLICATION wird in Snowflake nicht unterstützt. Sie wird für die Identität verwendet, die auf eine SEQUENCE migriert wird.
Warnung
Beachten Sie, dass NOT FOR REPLICATION eine Anweisung ist, die in Snowflake nicht benötigt wird, da sie in ein Äquivalent übersetzt wird, also wird sie entfernt.
Quelle¶
CREATE TABLE [TABLE1] (
[COL1] INT IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL
) ON [PRIMARY];
Ausgabe¶
CREATE OR REPLACE TABLE TABLE1 (
COL1 INT IDENTITY(1, 1) ORDER NOT NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
ON-PRIMARY¶
Die Option ON PRIMARY ist eine Anweisung, die in SQL Server verwendet wird, um festzulegen, in welcher Datei ein Objekt, z. B. eine Tabelle, erstellt werden soll. Zum Beispiel in einer primären oder sekundären Dateigruppe innerhalb der Datenbank. Snowflake bietet eine andere Logik und zeigt verschiedene Einschränkungen an. Bitte lesen Sie die folgende Snowflake-Dokumentation für weitere Informationen.
Quelle¶
CREATE TABLE [TABLE1](
[COL1] [nvarchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
CONSTRAINT [pk_dimAddress_AddressId] PRIMARY KEY CLUSTERED ([COL1])
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
Ausgabe¶
CREATE OR REPLACE TABLE TABLE1 (
COL1 VARCHAR(255) COLLATE 'EN-CI-AS' /*** SSC-PRF-0002 - CASE INSENSITIVE COLUMNS CAN DECREASE THE PERFORMANCE OF QUERIES ***/ /*** SSC-FDM-TS0002 - COLLATION FOR VALUE CP1 NOT SUPPORTED ***/ NOT NULL
CONSTRAINT pk_dimAddress_AddressId PRIMARY KEY (COL1)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "09/23/2024" }}'
;
ASC/DESC-Spaltensortierung¶
Spaltensortierung wird in Snowflake nicht unterstützt, die Schlüsselwörter ASC oder DESC werden entfernt.
Quelle¶
CREATE TABLE [TABLE1](
[COL1] [int] NOT NULL,
CONSTRAINT [constraint1] PRIMARY KEY CLUSTERED ([COL1] ASC)
) ON [PRIMARY]
Ausgabe¶
CREATE OR REPLACE TABLE TABLE1 (
COL1 INT NOT NULL,
CONSTRAINT constraint1 PRIMARY KEY (COL1)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "09/23/2024" }}'
;
COMPUTED-Spalten¶
Berechnete Spalten werden in Snowflake unterstützt, wir müssen nur den expliziten Datentyp hinzufügen, um die Tabelle zum Beispiel bereitstellen zu können.
Quelle¶
CREATE TABLE [TABLE1](
[COL2] [int] NOT NULL,
[COL2] [int] NOT NULL,
[COL1] AS (COL3 * COL2),
)
Ausgabe¶
CREATE OR REPLACE TABLE TABLE1 (
COL2 INT NOT NULL,
COL2 INT NOT NULL,
COL1 VARIANT AS (COL3 * COL2) /*** SSC-FDM-TS0014 - COMPUTED COLUMN WAS TRANSFORMED TO ITS SNOWFLAKE EQUIVALENT, FUNCTIONAL EQUIVALENCE VERIFICATION PENDING. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
Wenn der berechnete Ausdruck nicht transformiert werden kann, wird eine Warnung hinzugefügt und stattdessen eine einfache Spaltendefinition mit dem Rückgabetyp des Ausdrucks verwendet, wie im folgenden Beispiel:
Quelle¶
CREATE TABLE [TABLE1](
[Col1] AS (CONVERT ([XML], ExpressionValue))
)
Der Ausdruck CONVERT ([NUMERIC], ExpressionValue) wird noch nicht von SnowConvert AI unterstützt, sodass nach der Überprüfung SnowConvert AI bestimmt, dass sein Typ XML ist. Die Transformation sieht dann folgendermaßen aus:
Ausgabe¶
CREATE OR REPLACE TABLE TABLE1 (
Col1 TEXT AS (CAST(ExpressionValue AS VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - XML DATA TYPE CONVERTED TO VARIANT ***/!!!)) /*** SSC-FDM-TS0014 - COMPUTED COLUMN WAS TRANSFORMED TO ITS SNOWFLAKE EQUIVALENT, FUNCTIONAL EQUIVALENCE VERIFICATION PENDING. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
SnowConvert AI führt einen Prozess aus, um den ursprünglichen Ausdruckstyp in SQL Server zu bestimmen. Die Spalte hat jedoch den entsprechenden Zieltyp. Im vorherigen Beispiel war der Spaltentyp in SQLServer vom Typ XML, aber der Zieltyp in Snowflake für die Speicherung von XML ist TEXT. Weitere Informationen über die Zuordnung von Datentypen finden Sie in den Abschnitten zu Datentypen.
MASKED WITH-Spaltenoption¶
In SQL Server wird die Datenmaskierung verwendet, um sensible Informationen vor nicht privilegierten Benutzern zu schützen. Lesen Sie die Dokumentation SQL SERVER für weitere Informationen. In Snowflake gibt es eine dynamische Datenmaskierungsfunktion, die jedoch nur für die Enterprise Edition verfügbar ist. Bitte lesen Sie die folgende Snowflake Dokumentation.
Eingabe¶
CREATE TABLE TABLE1
(
[COL1] [nvarchar](50) MASKED WITH (FUNCTION = 'default()') NULL
);
Ausgabe¶
CREATE OR REPLACE TABLE TABLE1
(
COL1 VARCHAR(50)
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0017 - COLUMN MASKING NOT SUPPORTED IN CREATE TABLE ***/!!!
MASKED WITH (FUNCTION = 'default()') NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
ROWGUIDCOL-Spaltenoption¶
ROWGUIDCOL ist in Snowflake nicht anwendbar. Es wird in SQL Server für UNIQUEIDENTIFIER-Typen verwendet, die derzeit in VARCHAR übersetzt werden. Beispiel:
Eingabe¶
CREATE TABLE TABLEROWID (
[ROWGUID] UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL
) ON [PRIMARY];
Ausgabe¶
CREATE OR REPLACE TABLE TABLEROWID (
ROWGUID VARCHAR
!!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE 'ROWGUIDCOL COLUMN OPTION' CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
ROWGUIDCOL NOT NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
GENERATED ALWAYS AS ROW START/END-Spaltenoption¶
ROW START/END wird von Snowflake nicht unterstützt. Ein Fehler wird hinzugefügt, wenn SnowConvert AI versucht, diese Art von Spaltenoption zu transformieren.
Eingabe¶
CREATE TABLE TABLEROWID (
[COL1] DATETIME GENERATED ALWAYS AS ROW START NOT NULL
) ON [PRIMARY];
Ausgabe¶
CREATE OR REPLACE TABLE TABLEROWID (
COL1 TIMESTAMP_NTZ(3) GENERATED ALWAYS AS ROW START !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'GeneratedClause' NODE ***/!!! NOT NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
Azure Synapse Analytics¶
Übersetzungsspezifikation für Azure Synapse Analytics-Tabellen
Applies to
Azure Synapse Analytics
Beschreibung¶
Dieser Abschnitt enthält die Übersetzung der Syntax für Azure Synapse Analytics Tables.
CREATE TABLE¶
CREATE TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
(
{ column_name <data_type> [ <column_options> ] } [ ,...n ]
)
[ WITH ( <table_option> [ ,...n ] ) ]
[;]
CREATE TABLE AS¶
CREATE TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
[ ( column_name [ ,...n ] ) ]
WITH (
<distribution_option> -- required
[ , <table_option> [ ,...n ] ]
)
AS <select_statement>
OPTION <query_hint>
[;]
Quellcode-Muster¶
WITH Tabellenoptionen¶
Azure Synapse Analytics bietet eine zusätzliche Syntax für die Definition von Tabellenoptionen.
<table_option> ::=
{
CLUSTERED COLUMNSTORE INDEX -- default for Azure Synapse Analytics
| CLUSTERED COLUMNSTORE INDEX ORDER (column [,...n])
| HEAP --default for Parallel Data Warehouse
| CLUSTERED INDEX ( { index_column_name [ ASC | DESC ] } [ ,...n ] ) -- default is ASC
}
{
DISTRIBUTION = HASH ( distribution_column_name )
| DISTRIBUTION = HASH ( [distribution_column_name [, ...n]] )
| DISTRIBUTION = ROUND_ROBIN -- default for Azure Synapse Analytics
| DISTRIBUTION = REPLICATE -- default for Parallel Data Warehouse
}
| PARTITION ( partition_column_name RANGE [ LEFT | RIGHT ] -- default is LEFT
FOR VALUES ( [ boundary_value [,...n] ] ) )
Snowflake sorgt automatisch für die Optimierung von Tabellen durch Mechanismen wie die Mikropartitionierung. Aus diesem Grund gibt es in Snowflake keine entsprechende Syntax für einige dieser Tabellenoptionen. Daher ist es nicht notwendig, einige der Tabellenoptionen von Transact zu definieren.
Tabellenoptionen, die ausgelassen werden sollen:
CLUSTERED COLUMNSTORE INDEX (ohne Spalte)
HEAP
DISTRIBUTION
PARTITION
CLUSTERED [ COLUMNSTORE ] INDEX mit Spalten, wird in Snowflake in CLUSTER BY umgewandelt. Eine Leistungsüberprüfung PRF wird hinzugefügt, da es ratsam ist, zu prüfen, ob die Definition eines CLUSTER KEY notwendig ist.
Transact¶
CREATE TABLE my_table (
enterprise_cif INT,
name NVARCHAR(100),
address NVARCHAR(255),
created_at DATETIME
)
WITH (
DISTRIBUTION = HASH(enterprise_cif),
CLUSTERED INDEX (enterprise_cif)
);
Snowflake¶
CREATE OR REPLACE TABLE my_table (
enterprise_cif INT,
name VARCHAR(100),
address VARCHAR(255),
created_at TIMESTAMP_NTZ(3)
)
--** SSC-PRF-0007 - PERFORMANCE REVIEW - CLUSTER BY **
CLUSTER BY (enterprise_cif)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "10/09/2024" }}'
;
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs¶
SSC-PRF-0007: PERFORMANCE REVIEW - CLUSTER BY.
TEXTIMAGE_ON¶
Applies to
SQL Server
Bemerkung
Nicht relevante Anweisung.
Warnung
Beachten Sie, dass diese Anweisung aus der Migration entfernt wurde, da es sich um eine nicht relevante Syntax handelt. Das bedeutet, dass sie in Snowflake nicht erforderlich ist.**
Beschreibung¶
TEXTIMAGE_ON [PRIMARY] ist eine Möglichkeit in Transact, die großen Informationsgruppen innerhalb einer Tabelle zu handhaben. In Snowflake ist es nicht erforderlich, diese Art von Merkmalen zu definieren, da Snowflake große Datendateien oder Informationen in einer anderen Anordnung verarbeitet.
Beispiel¶
Quellcode-Muster¶
Beachten Sie, dass in diesem Beispiel TEXTIMAGE_ON [PRIMARY] wegen der unnötigen Syntax entfernt wurde.
SQL Server¶
CREATE TABLE [dbo].[TEST_Person](
[date_updated] [datetime] NULL
) TEXTIMAGE_ON [PRIMARY]
Snowflake¶
CREATE OR REPLACE TABLE dbo.TEST_Person (
date_updated TIMESTAMP_NTZ(3) NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs¶
Keine zugehörigen EWIs.