SnowConvert AI - SQL Server-Azure Synapse - システムテーブル

Transact-SQL システムテーブルの翻訳仕様

システムテーブル

Transact-SQL

Snowflake SQL

メモ

SYS.ALL_VIEWS

INFORMATION_SCHEMA.VIEWS

SYS.ALL_COLUMNS

INFORMATION_SCHEMA.COLUMNS

SYS.COLUMNS

INFORMATION_SCHEMA.COLUMNS

SYS.OBJECTS

INFORMATION_SCHEMA.OBJECT_PRIVILEGES

SYS.PROCEDURES

INFORMATION_SCHEMA.PROCEDURES

SYS.SEQUENCES

INFORMATION_SCHEMA.SEQUENCES

SYS.ALL_OBJECTS

INFORMATION_SCHEMA.OBJECT_PRIVILEGES

ALL_PARAMETERS

サポート対象外

SYS.ALL_SQL_MODULES

サポート対象外

SYS.ALLOCATION_UNITS

サポート対象外

SYS.ASSEMBLY_MODULES

サポート対象外

SYS.CHECK_CONSTRAINTS

サポート対象外

SYS.COLUMN_STORE_DICTIONARIES

サポート対象外

SYS.COLUMN_STORE_ROW_GROUPS

サポート対象外

SYS.COLUMN_STORE_SEGMENTS

サポート対象外

SYS.COMPUTED_COLUMNS

サポート対象外

SYS.DEFAULT_CONSTRAINTS

サポート対象外

SYS.EVENTS

サポート対象外

SYS.EVENT_NOTIFICATIONS

サポート対象外

SYS.EVENT_NOTIFICATION_EVENT_TYPES

サポート対象外

SYS.EXTENDED_PROCEDURES

サポート対象外

SYS.EXTERNAL_LANGUAGE_FILES

サポート対象外

SYS.EXTERNAL_LANGUAGES

サポート対象外

SYS.EXTERNAL_LIBRARIES

サポート対象外

SYS.EXTERNAL_LIBRARY_FILES

サポート対象外

SYS.FOREIGN_KEYS

INFORMATION_SCHEMA.TABLE_CONSTRAINTS

SYS.FOREIGN_KEY_COLUMNS

サポート対象外

SYS.FUNCTION_ORDER_COLUMNS

サポート対象外

SYS.HASH_INDEXES

サポート対象外

SYS.INDEXES

サポート対象外

SYS.INDEX_COLUMNS

サポート対象外

SYS.INDEX_RESUMABLE_OPERATIONS

サポート対象外

SYS.INTERNAL_PARTITIONS

サポート対象外

SYS.INTERNAL_TABLES

サポート対象外

SYS.KEY_CONSTRAINTS

サポート対象外

SYS.MASKED_COLUMNS

サポート対象外

SYS.MEMORY_OPTIMIZED_TABLES_INTERNAL_ATTRIBUTES

サポート対象外

SYS.MODULE_ASSEMBLY_USAGES

サポート対象外

SYS.NUMBERED_PROCEDURES

サポート対象外

SYS.NUMBERED_PROCEDURE_PARAMETERS

サポート対象外

SYS.PARAMETERS

サポート対象外

SYS.PARTITIONS

サポート対象外

SYS.PERIODS

サポート対象外

SYS.SERVER_ASSEMBLY_MODULES

サポート対象外

SYS.SERVER_EVENTS

サポート対象外

SYS.SERVER_EVENT_NOTIFICATIONS

サポート対象外

SYS.SERVER_SQL_MODULE

サポート対象外

SYS.SERVER_TRIGGERS

サポート対象外

SYS._SERVER_TRIGGER_EVENTS

サポート対象外

SYS.SQL_DEPENDENCIES

サポート対象外

SYS.SQL_EXPRESSION_DEPENDENCIES

サポート対象外

SYS.SQL_MODULES

サポート対象外

SYS.STATS

サポート対象外

SYS.STATS_COLUMNS

サポート対象外

SYS.SYNONYMS

サポート対象外

SYS.SYSTEM_COLUMNS

サポート対象外

SYS.SYSTEM_OBJECTS

サポート対象外

SYS.SYSTEM_PARAMETERS

サポート対象外

SYS.SYSCONSTRAINTS

INFORMATION_SCHEMA.TABLE_CONSTRAINTS

SYS.SYSTEM_SQL_MODULES"

サポート対象外

SYSCONSTRAINTS

Applies to
  • SQL Server

  • Azure Synapse Analytics

注釈

わかりやすくするため、出力コードの一部を省略しています。

説明

The sysconstraints compatibility view maps constraint IDs to the objects and tables they belong to. It is a legacy system table from earlier SQL Server versions (SQL Server documentation).

SnowConvert AI transforms queries against sysconstraints (or sys.sysconstraints) into queries against Snowflake's INFORMATION_SCHEMA.TABLE_CONSTRAINTS. The transformation also rewrites common OBJECT_NAME() patterns:

sysconstraints pattern

Snowflake equivalent

OBJECT_NAME(constid) = 'X'

CONSTRAINT_NAME = 'X'

OBJECT_NAME(id) = 'Y'

TABLE_NAME = 'Y'

When OBJECT_NAME() is called with an unrecognized argument or compared against a non-literal value, the expression is preserved and SSC-EWI-TS0104 is emitted.

サンプルソースパターン

1. Basic sysconstraints query

SQL Server
SELECT 1 FROM sysconstraints WHERE OBJECT_NAME(constid) = 'CPK' AND OBJECT_NAME(id) = 'T';
Snowflake
SELECT
  1
FROM
  INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE
  CONSTRAINT_NAME = 'CPK'
  AND TABLE_NAME = 'T';

2. Qualified sys.sysconstraints

SQL Server
SELECT 1 FROM sys.sysconstraints WHERE OBJECT_NAME(constid) = 'PK_Orders' AND OBJECT_NAME(id) = 'Orders';
Snowflake
SELECT
  1
FROM
  INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE
  CONSTRAINT_NAME = 'PK_Orders'
  AND TABLE_NAME = 'Orders';

3. sysconstraints inside IF EXISTS with DROP CONSTRAINT

SQL Server
IF ( EXISTS(SELECT 1 FROM sysconstraints WHERE OBJECT_NAME(constid) = 'LoanDynamicMBSLoadCPK'))
BEGIN
  ALTER TABLE [dbo].[LoanDynamicMBSLoad] DROP CONSTRAINT [LoanDynamicMBSLoadCPK] WITH ( ONLINE = OFF )
END
GO
Snowflake
BEGIN
  IF ((EXISTS (
    SELECT
      1
    FROM
      INFORMATION_SCHEMA.TABLE_CONSTRAINTS
    WHERE
      CONSTRAINT_NAME = 'LoanDynamicMBSLoadCPK'
  ))) THEN
    BEGIN
      ALTER TABLE IF EXISTS dbo.LoanDynamicMBSLoad DROP CONSTRAINT LoanDynamicMBSLoadCPK;
    END;
  END IF;
END;

注釈

The WITH ( ONLINE = OFF ) clause is removed because Snowflake does not support index options on DROP CONSTRAINT. The IF EXISTS at the constraint level is also stripped because Snowflake does not support it in that position.

4. Unmapped argument emits EWI

SQL Server
SELECT 1 FROM sysconstraints WHERE OBJECT_NAME(status) = 'X';
Snowflake
SELECT
  1
FROM
  INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE
  !!!RESOLVE EWI!!! /*** SSC-EWI-TS0104 - 'OBJECT_NAME(status) in sysconstraints query' COULD NOT BE AUTOMATICALLY CONVERTED IN SYSTEM TABLE QUERY. MANUAL REVIEW REQUIRED ***/!!!
  OBJECT_NAME(status) = 'X';

既知の問題

1. Only OBJECT_NAME(constid) and OBJECT_NAME(id) are automatically mapped

Other arguments to OBJECT_NAME() inside sysconstraints queries cannot be automatically resolved and will emit SSC-EWI-TS0104.

2. Non-literal comparisons are not converted

If OBJECT_NAME() is compared to a column reference, variable, or expression (instead of a string literal), the expression is preserved with an EWI annotation.

3. JOIN statements with sysconstraints are not supported

Queries that join sysconstraints with other tables are not automatically translated.

SYS.FOREIGN_KEYS

Applies to
  • SQL Server

  • Azure Synapse Analytics

注釈

わかりやすくするため、出力コードの一部を省略しています。

説明

FOREIGN KEY 制約であるオブジェクトごとの行を含みます(SQLServer ドキュメント)。

FOREIGN KEY (sys.foreign_keys)の列は以下の通りです。

列名

データ型

説明

Snowflakeに同等の列がある

-

このビューが継承する列のリストについては、 sys.objects (Transact-SQL). をご参照ください。

一部

referenced_object_id

int

参照されるオブジェクトの ID 。

無し

key_index_id

int

参照オブジェクト内のキーインデックスの ID 。

無し

is_disabled

bit

FOREIGN KEY 制約が無効です。

無し

is_not_for_replication

bit

FOREIGN KEY 制約は、 NOT FOR REPLICATION オプションを使用して作成されました。

無し

is_not_trusted

bit

FOREIGN KEY 制約がシステムによって検証されていません。

無し

delete_referential_action

tinyint

削除が発生したときに、この FOREIGN KEY に対して宣言された参照アクション。SQLServer ドキュメント をご参照ください。

無し

delete_referential_action_desc

nvarchar(60)

削除が発生したときに、この FOREIGN KEY に対して宣言された参照アクションの説明。SQLServer ドキュメント をご参照ください。

無し

update_referential_action

tinyint

更新が発生したときに、この FOREIGN KEY に対して宣言された参照アクション。SQLServer ドキュメント をご参照ください。

無し

update_referential_action_desc

nvarchar(60)

更新が発生したときに、この FOREIGN KEY に対して宣言された参照アクションの説明。SQLServer ドキュメント をご参照ください。

無し

is_system_named

bit

1 = 名前がシステムによって生成されました。

0 = 名前がユーザーによって提供されました。

無し

sys.objects から継承される列は以下の通りです。

詳細は、 sys.objectsのドキュメント を参照してください。

列名

データ型

説明

Snowflakeに同等の列がある

name

sysname

オブジェクト名。

有り

object_id

int

オブジェクトの識別番号。データベース内で一意です。

無し

principal_id

int

スキーマ所有者と異なる場合は、各所有者の ID 。

無し

schema_id

int

オブジェクトが含まれるスキーマの ID 。

無し

parent_object_id

int

このオブジェクトが属するオブジェクトの ID 。

無し

type

char(2)

オブジェクト型

有り

type_desc

nvarchar(60)

オブジェクト型の説明

有り

create_date

datetime

オブジェクトが作成された日付。

有り

modify_date

datetime

ALTER ステートメントを使用してオブジェクトが最後に変更された日付。

有り

is_ms_shipped

bit

オブジェクトは、 SQL Serverの内部コンポーネントによって作成されます。

無し

is_published

bit

オブジェクトは、 SQL Serverの内部コンポーネントによって作成されます。

無し

is_schema_published

bit

オブジェクトのスキーマのみが公開されています。

無し

警告

この場合、sys.foreign_keysについては、Snowflakeには同等のものがないことに注意してください。しかし、等価性はsys.objectsから継承された列の基になります。

適用可能な列の等価性

SQLServer

Snowflake

制限事項

適用可能

name

CONSTRAINT_NAME

データベースによって自動生成された名前は、ターゲットのSnowflakeの自動生成名に沿って確認されることがあります。

有り

type

CONSTRAINT_TYPE

型列には様々なオプションがあります。しかし、この場合、サポートされるのは外部キーを表す'F'の文字だけです。

いいえ。すべてのテーブル制約の外部キーを判断するために追加の検証を行うため、適用できません。

type_desc

CONSTRAINT_TYPE

No limitations found.

いいえ。すべてのテーブル制約の外部キーを判断するために追加の検証を行うため、適用できません。

create_date

CREATED

データ型の違い。

有り

modify_date

LAST_ALTERED

データ型の違い。

有り

parent_object_id

CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, TABLE_NAME

OBJECT_ID() 関数を使用するケースに対してのみ列が生成され、名前は有効なパターンを持ちます。

有り

SQL Serverでの構文
SELECT ('column_name' | * )
FROM sys.foreign_keys;
Snowflakeの構文
SELECT ('column_name' | * )
FROM information_schema.table_constraints 
WHERE CONSTRAINT_TYPE = 'FOREIGN KEY';

注釈

システム外部キーの等価性は、Snowflakeのin ormation_schema.table_constraintsのカタログビューであるため、外部キー制約を他の制約から識別するには、追加の「WHERE」句で制約のタイプを定義する必要があります。

サンプルソースパターン

以下のサンプルを正しく実行するには、以下のステートメントを実行する必要があります。

SQL Server

CREATE TABLE Customers (
    CustomerID INT PRIMARY KEY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    Email VARCHAR(100)
);

CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    CustomerID INT,
    OrderDate DATE,
    TotalAmount DECIMAL(10, 2),
    CONSTRAINT FK_Name_Test FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);


INSERT INTO Customers (CustomerID, FirstName, LastName, Email)
VALUES
    (1, 'John', 'Doe', 'john.doe@example.com'),
    (2, 'Jane', 'Smith', 'jane.smith@example.com');

INSERT INTO Orders (OrderID, CustomerID, OrderDate, TotalAmount)
VALUES
    (101, 1, '2023-09-01', 100.50),
    (102, 1, '2023-09-02', 75.25),
    (103, 2, '2023-09-03', 50.00);
Snowflake
CREATE OR REPLACE TABLE Customers (
    CustomerID INT PRIMARY KEY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    Email VARCHAR(100)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;

CREATE OR REPLACE TABLE Orders (
    OrderID INT PRIMARY KEY,
    CustomerID INT,
    OrderDate DATE,
    TotalAmount DECIMAL(10, 2),
       CONSTRAINT FK_Name_Test FOREIGN KEY (CustomerID) REFERENCES Customers (CustomerID)
   )
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;

INSERT INTO Customers (CustomerID, FirstName, LastName, Email)
VALUES
    (1, 'John', 'Doe', 'john.doe@example.com'),
    (2, 'Jane', 'Smith', 'jane.smith@example.com');

INSERT INTO Orders (OrderID, CustomerID, OrderDate, TotalAmount)
VALUES
    (101, 1, '2023-09-01', 100.50),
    (102, 1, '2023-09-02', 75.25),
    (103, 2, '2023-09-03', 50.00);

1.単純な選択ケース

SQL Server
SELECT *
FROM sys.foreign_keys;
結果

name

object_id

principal_id

schema_id

type

type_desc

create_date

modify_date

parent_object_id

is_ms_shipped

is_published

is_schema_published

referenced_object_id

key_index_id

is_disabled

is_not_for_replication

is_not_trusted

delete_referential_action

delete_referential_action_desc

update_referential_action

update_referential_action_desc

is_system_named

FK_Name_Test

1719677174

NULL

1

F

FOREIGN_KEY_CONSTRAINT

2023-09-11 22:20:04.160

2023-09-11 22:20:04.160

1687677060

false

true

false

1655676946

1

false

false

0

NO_ACTION

0

NO_ACTION

true

Snowflake
SELECT *
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE
CONSTRAINT_TYPE = 'FOREIGN KEY';
結果

CONSTRAINT_CATALOG

CONSTRAINT_SCHEMA

CONSTRAINT_NAME

TABLE_CATALOG

TABLE_SCHEMA

TABLE_NAME

CONSTRAINT_TYPE

IS_DEFERRABLE

INITIALLY_DEFERRED

ENFORCED

COMMENT

CREATED

LAST_ALTERED

RELY

DBTEST

PUBLIC

FK_Name_Test

DATETEST

PUBLIC

ORDERS

FOREIGN KEY

NO

YES

NO

null

2023-09-11 15:23:51.969 -0700

2023-09-11 15:23:52.097 -0700

NO

警告

列のオブジェクトの違いや等価性の欠落により、結果は異なります。結果を確認することができます。

2.名前列ケース

SQL Server
SELECT * FROM sys.foreign_keys WHERE name = 'FK_Name_Test';
結果

name

object_id

principal_id

schema_id

type

type_desc

create_date

modify_date

parent_object_id

is_ms_shipped

is_published

is_schema_published

referenced_object_id

key_index_id

is_disabled

is_not_for_replication

is_not_trusted

delete_referential_action

delete_referential_action_desc

update_referential_action

update_referential_action_desc

is_system_named

FK_Name_Test

1719677174

NULL

1

F

FOREIGN_KEY_CONSTRAINT

2023-09-11 22:20:04.160

2023-09-11 22:20:04.160

1687677060

false

true

false

1655676946

1

false

false

0

NO_ACTION

0

NO_ACTION

true

Snowflake
SELECT * FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE
CONSTRAINT_NAME = 'FK_NAME_TEST'
AND CONSTRAINT_TYPE = 'FOREIGN KEY';
結果

CONSTRAINT_CATALOG

CONSTRAINT_SCHEMA

CONSTRAINT_NAME

TABLE_CATALOG

TABLE_SCHEMA

TABLE_NAME

CONSTRAINT_TYPE

IS_DEFERRABLE

INITIALLY_DEFERRED

ENFORCED

COMMENT

CREATED

LAST_ALTERED

RELY

DBTEST

PUBLIC

FK_Name_Test

DATETEST

PUBLIC

ORDERS

FOREIGN KEY

NO

YES

NO

null

2023-09-11 15:23:51.969 -0700

2023-09-11 15:23:52.097 -0700

NO

警告

This translation may require verification if the constraint name is auto-generated by the database and used in the query. For more information review the Known Issues section.

3.親オブジェクト ID ケース

この例では、異なる列と同等の列を作成するための名前の処理を例示するために、データベースとスキーマを作成しました。

SQL Server
use database_name_test
create schema schema_name_test

CREATE TABLE schema_name_test.Customers (
    CustomerID INT PRIMARY KEY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    Email VARCHAR(100)
);

CREATE TABLE schema_name_test.Orders (
    OrderID INT PRIMARY KEY,
    CustomerID INT,
    OrderDate DATE,
    TotalAmount DECIMAL(10, 2),
    CONSTRAINT FK_Name_Test FOREIGN KEY (CustomerID) REFERENCES schema_name_test.Customers(CustomerID)
);

INSERT INTO schema_name_test.Customers (CustomerID, FirstName, LastName, Email)
VALUES
    (1, 'John', 'Doe', 'john.doe@example.com'),
    (2, 'Jane', 'Smith', 'jane.smith@example.com');

INSERT INTO schema_name_test.Orders (OrderID, CustomerID, OrderDate, TotalAmount)
VALUES
    (101, 1, '2023-09-01', 100.50),
    (102, 1, '2023-09-02', 75.25),
    (103, 2, '2023-09-03', 50.00);

SELECT * FROM sys.foreign_keys WHERE name = 'FK_Name_Test' AND parent_object_id = OBJECT_ID(N'database_name_test.schema_name_test.Orders')
結果

name

object_id

principal_id

schema_id

type

type_desc

create_date

modify_date

parent_object_id

is_ms_shipped

is_published

is_schema_published

referenced_object_id

key_index_id

is_disabled

is_not_for_replication

is_not_trusted

delete_referential_action

delete_referential_action_desc

update_referential_action

update_referential_action_desc

is_system_named

FK_Name_Test

1719677174

NULL

1

F

FOREIGN_KEY_CONSTRAINT

2023-09-11 22:20:04.160

2023-09-11 22:20:04.160

1687677060

false

true

false

1655676946

1

false

false

0

NO_ACTION

0

NO_ACTION

true

Snowflake
USE DATABASE database_name_test;

CREATE SCHEMA IF NOT EXISTS schema_name_test
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "transact",  "convertedOn": "07/11/2025",  "domain": "no-domain-provided" }}'
;

CREATE OR REPLACE TABLE schema_name_test.Customers (
    CustomerID INT PRIMARY KEY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    Email VARCHAR(100)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "transact",  "convertedOn": "07/11/2025",  "domain": "no-domain-provided" }}'
;

CREATE OR REPLACE TABLE schema_name_test.Orders (
    OrderID INT PRIMARY KEY,
    CustomerID INT,
    OrderDate DATE,
    TotalAmount DECIMAL(10, 2),
       CONSTRAINT FK_Name_Test FOREIGN KEY (CustomerID) REFERENCES schema_name_test.Customers (CustomerID)
   )
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "transact",  "convertedOn": "07/11/2025",  "domain": "no-domain-provided" }}'
;

INSERT INTO schema_name_test.Customers (CustomerID, FirstName, LastName, Email)
VALUES
    (1, 'John', 'Doe', 'john.doe@example.com'),
    (2, 'Jane', 'Smith', 'jane.smith@example.com');

INSERT INTO schema_name_test.Orders (OrderID, CustomerID, OrderDate, TotalAmount)
VALUES
    (101, 1, '2023-09-01', 100.50),
    (102, 1, '2023-09-02', 75.25),
    (103, 2, '2023-09-03', 50.00);

SELECT * FROM
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE
    CONSTRAINT_NAME = 'FK_NAME_TEST'
    AND CONSTRAINT_CATALOG = 'DATABASE_NAME_TEST'
    AND CONSTRAINT_SCHEMA = 'SCHEMA_NAME_TEST'
    AND TABLE_NAME = 'ORDERS'
    AND CONSTRAINT_TYPE = 'FOREIGN KEY';
結果

CONSTRAINT_CATALOG

CONSTRAINT_SCHEMA

CONSTRAINT_NAME

TABLE_CATALOG

TABLE_SCHEMA

TABLE_NAME

CONSTRAINT_TYPE

IS_DEFERRABLE

INITIALLY_DEFERRED

ENFORCED

COMMENT

CREATED

LAST_ALTERED

RELY

DATABASE_NAME_TEST

SCHEMA_NAME_TEST

FK_Name_Test

DATABASE_NAME_TEST

SCHEMA_NAME_TEST

ORDERS

FOREIGN KEY

NO

YES

NO

null

2023-09-11 15:23:51.969 -0700

2023-09-11 15:23:52.097 -0700

NO

警告

OBJECT_ID()関数の中に入ってくる名前が有効なパターンでない場合、特殊文字に対する名前処理の制限により変換されません。

警告

Snowflakeで使用されているデータベースを確認します。

4.型列ケース

SQL Serverの「F」は「外部キー」を意味し、すべてのテーブル制約から外部キーを指定するために、末尾の検証により削除されます。

SQL Server
 SELECT * FROM sys.foreign_keys WHERE type = 'F';
結果

name

object_id

principal_id

schema_id

type

type_desc

create_date

modify_date

parent_object_id

is_ms_shipped

is_published

is_schema_published

referenced_object_id

key_index_id

is_disabled

is_not_for_replication

is_not_trusted

delete_referential_action

delete_referential_action_desc

update_referential_action

update_referential_action_desc

is_system_named

FK_Name_Test

1719677174

NULL

3

F

FOREIGN_KEY_CONSTRAINT

2023-09-11 22:20:04.160

2023-09-11 22:20:04.160

1687677060

false

true

false

1655676946

1

false

false

0

NO_ACTION

0

NO_ACTION

true

Snowflake
 SELECT * FROM
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE
    type = 'F' AND CONSTRAINT_TYPE = 'FOREIGN KEY';
結果

CONSTRAINT_CATALOG

CONSTRAINT_SCHEMA

CONSTRAINT_NAME

TABLE_CATALOG

TABLE_SCHEMA

TABLE_NAME

CONSTRAINT_TYPE

IS_DEFERRABLE

INITIALLY_DEFERRED

ENFORCED

COMMENT

CREATED

LAST_ALTERED

RELY

DBTEST

PUBLIC

FK_Name_Test

DATETEST

PUBLIC

ORDERS

FOREIGN KEY

NO

YES

NO

null

2023-09-11 15:23:51.969 -0700

2023-09-11 15:23:52.097 -0700

NO

5.型Desc列ケース

「type_desc」列は、すべてのテーブル制約から外部キーを指定するために、末尾の検証により削除されます。

SQL Server
SELECT
    * 
FROM
    sys.foreign_keys 
WHERE 
    type_desc = 'FOREIGN_KEY_CONSTRAINT';
結果

name

object_id

principal_id

schema_id

type

type_desc

create_date

modify_date

parent_object_id

is_ms_shipped

is_published

is_schema_published

referenced_object_id

key_index_id

is_disabled

is_not_for_replication

is_not_trusted

delete_referential_action

delete_referential_action_desc

update_referential_action

update_referential_action_desc

is_system_named

FK_Name_Test

1719677174

NULL

3

F

FOREIGN_KEY_CONSTRAINT

2023-09-11 22:20:04.160

2023-09-11 22:20:04.160

1687677060

false

true

false

1655676946

1

false

false

0

NO_ACTION

0

NO_ACTION

true

Snowflake
SELECT
    *
FROM
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE
    type_desc = 'FOREIGN_KEY_CONSTRAINT' AND CONSTRAINT_TYPE = 'FOREIGN KEY';
結果

CONSTRAINT_CATALOG

CONSTRAINT_SCHEMA

CONSTRAINT_NAME

TABLE_CATALOG

TABLE_SCHEMA

TABLE_NAME

CONSTRAINT_TYPE

IS_DEFERRABLE

INITIALLY_DEFERRED

ENFORCED

COMMENT

CREATED

LAST_ALTERED

RELY

DBTEST

PUBLIC

FK_Name_Test

DATETEST

PUBLIC

ORDERS

FOREIGN KEY

NO

YES

NO

null

2023-09-11 15:23:51.969 -0700

2023-09-11 15:23:52.097 -0700

NO

6.日付列の変更の単純なケース

SQL Server
SELECT *
FROM sys.foreign_keys
WHERE modify_date = CURRENT_TIMESTAMP;
結果
The query produced no results.

Snowflake
SELECT *
FROM
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE
    LAST_ALTERED = CURRENT_TIMESTAMP()
    AND CONSTRAINT_TYPE = 'FOREIGN KEY';
結果
The query produced no results.

7.DATEDIFF()ケースによる日付列の変更

次の例は、sys.objectsから継承されたsys.foreign_keysの列が関数 DATEDIFF の中にある、より複雑なシナリオを示しています。この場合、該当する等価性に対応する引数は、Snowflakeのinformation.schemaの対応する列に変更されます。

SQL Server
SELECT *
FROM sys.foreign_keys
WHERE DATEDIFF(DAY, modify_date, GETDATE()) <= 30;
結果
The foreign keys altered in the last 30 days.
Snowflake
SELECT *
FROM
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE
    DATEDIFF(DAY, LAST_ALTERED, CURRENT_TIMESTAMP() :: TIMESTAMP) <= 30
    AND CONSTRAINT_TYPE = 'FOREIGN KEY';
結果
The foreign keys altered in the last 30 days.

8.日付列の作成ケース

SQL Server
SELECT *
FROM sys.foreign_keys
WHERE create_date = '2023-09-12 14:36:38.060';
結果
The foreign keys that were created on the specified date and time.

Snowflake
SELECT *
FROM
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE
    CREATED = '2023-09-12 14:36:38.060'
    AND CONSTRAINT_TYPE = 'FOREIGN KEY';
結果
The foreign keys that were created on the specified date and time.

警告

クエリが実行された時間によって作成日が特定される場合、クエリ結果が変わる可能性があります。オリジンデータベースで指定されたクエリを一度に実行し、新しいSnowflakeクエリで別の時間にオブジェクトを実行することが可能です。

9.選択列単一名ケース

SQL Server
SELECT name
FROM sys.foreign_keys;
結果

name

FK_Name_Test

Snowflake
SELECT
    CONSTRAINT_NAME
FROM
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE
    CONSTRAINT_TYPE = 'FOREIGN KEY';
結果

CONSTRAINT_NAME

FK_Name_Test

10.選択列修飾名ケース

SQL Server
SELECT
    fk.name
FROM sys.foreign_keys AS fk;
結果

name

FK_Name_Test

Snowflake
SELECT
    fk.CONSTRAINT_NAME
FROM
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS fk
WHERE
    CONSTRAINT_TYPE = 'FOREIGN KEY';
結果

CONSTRAINT_NAME

FK_Name_Test

既知の問題

1.制約にユーザーが作成した名前がない場合、「name」列は正しい出力を示さないことがあります

もし参照された名前がデータベースから自動生成されたものであれば、それを見直して希望の値を使用することができるでしょう。

2.列を選択する場合、Snowflakeで同等の適用可能な列に応じて制限があります

sys.foreign_keysの列はSnowflakeでは完全に等価ではないため、等価性の制限により結果が変わる場合があります。

3.OBJECT_ID()関数が処理すべき有効なパターンを持っているか、データベース、スキーマ、またはテーブルを抽出できませんでした

OBJECT_ID()関数を受け取った名前に基づいて、この名前の処理は制限され、形式に依存します。

4.OBJECT_NAME()関数ケースを使用した名前列

OBJECT_NAME()関数はまだサポートされていないため、この関数に関連する変換はサポートされていません。

SQL Server
SELECT name AS ForeignKeyName,
    OBJECT_NAME(parent_object_id) AS ReferencingTable,
    OBJECT_NAME(referenced_object_id) AS ReferencedTable
FROM sys.foreign_keys;
Snowflake
SELECT
    name AS ForeignKeyName,
    OBJECT_NAME(parent_object_id) !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'OBJECT_NAME' NODE ***/!!! AS ReferencingTable,
    OBJECT_NAME(referenced_object_id) !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'OBJECT_NAME' NODE ***/!!! AS ReferencedTable
FROM
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE
    CONSTRAINT_TYPE = 'FOREIGN KEY';
5.SCHEMA_NAME()と TYPE_NAME()関数もまだサポートされていません。
6.システムテーブルがサポートされていない場合、異なるJoinステートメント型はサポートされないことがあります。サポートされているシステムテーブルを確認します。
7.JOIN ステートメントを含むケースはサポートされていません。
8.エイリアス AS を含む名前はサポートされていません。

関連 EWIs

  1. SSC-EWI-0073: 機能同等性レビュー保留中。