本文へスキップ
IntoSQL ホーム

SQL Server のスクリプトを古いまたは新しい SQL Server へ移す

SSMS のスクリプトの生成でスキーマとデータを書き出したスクリプト (.sql または .sql.gz、UTF-16 または UTF-8) をドロップすると、どのバージョンで書かれたものでも、SQL Server 2017 から 2025 で読み込めるスクリプトをダウンロードできます。IDENTITY、照合順序、xml や hierarchyid などの型はそのまま残り、すべての変更はレポートに記載されます。

ファイル
sqlshop_2024_sqlserver.sqlサンプルファイル、11 KB
データベース

18 行を変換、修正 1 件、却下なし

表示

shop_2024_sqlserver.sql のテーブルSQL Server のダンプ · SQL Server Management Objects で作成 · utf-8

  • orders10 行
    11 列
    idint not null
    customer_idint not null
    statusnvarchar(10) not null
    totaldecimal(19,4) not null
    itemstinyint not null
    ordered_atdatetime2(0) not null
    shipped_atdatetime2(7)
    notenvarchar(max)
    detailsnvarchar(max)
    order_refuniqueidentifier not null
    total_with_taxdecimal(12,2)
  • customers8 行1
    8 列
    idint not null
    namenvarchar(100) not null
    emailnvarchar(200) not null
    countrynchar(2) not null
    is_activebit not null
    signed_update
    created_atdatetimeoffset(0) not null
    row_versionbinary(8)

未変換

  • ビュー paid_orders
  • トリガー orders_no_negative

これらはデータベースごとに独自の言語で書かれます。SQL Server 用に書き直してください。

-- Written by IntoSQL from a SQL Server dump. Load it with: sqlcmd -b -f 65001 -d <database> -i <file>
SET NOCOUNT ON;
SET ANSI_NULLS ON;
SET QUOTED_IDENTIFIER ON;
SET ANSI_PADDING ON;
SET ANSI_WARNINGS ON;
SET ARITHABORT ON;
SET CONCAT_NULL_YIELDS_NULL ON;
SET NUMERIC_ROUNDABORT OFF;
GO

CREATE TABLE [dbo].[orders] (
    [id] int IDENTITY(1, 1) NOT NULL,
    [customer_id] int NOT NULL,
    [status] nvarchar(10) COLLATE SQL_Latin1_General_CP1_CI_AS DEFAULT N'pending' NOT NULL,
    [total] decimal(19,4) NOT NULL,
    [items] tinyint DEFAULT 1 NOT NULL,
    [ordered_at] datetime2(0) NOT NULL,
    [shipped_at] datetime2(7) NULL,
    [note] nvarchar(max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [details] nvarchar(max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [order_ref] uniqueidentifier DEFAULT (NEWID()) NOT NULL,
    [total_with_tax] AS CAST((CAST([total] * (1.16) AS decimal(12,2))) AS decimal(12,2)) PERSISTED,
    CONSTRAINT [check2] CHECK ([status] = N'cancelled' OR [status] = N'shipped' OR [status] = N'paid' OR [status] = N'pending'),
    CONSTRAINT [check3] CHECK ([total] >= (0)),
    CONSTRAINT [PK_orders] PRIMARY KEY ([id])
);
GO

CREATE TABLE [dbo].[customers] (
    [id] int IDENTITY(1, 1) NOT NULL,
    [name] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [email] nvarchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [country] nchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS DEFAULT N'US' NOT NULL,
    [is_active] bit DEFAULT 1 NOT NULL,
    [signed_up] date NULL,
    [created_at] datetimeoffset(0) DEFAULT SYSDATETIMEOFFSET() NOT NULL,
    [row_version] binary(8) NULL,
    CONSTRAINT [PK_customers] PRIMARY KEY ([id])
);
GO

SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [signed_up], [created_at]) VALUES
(1,N'Ana Martínez',N'ana@example.com',N'MX',1,'2023-01-15','2023-01-15T04:24:00.0000000-06:00');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [signed_up], [created_at]) VALUES
(2,N'Zoë Müller',N'zoe@example.de',N'DE',1,'2023-02-03','2023-02-03T09:11:42.0000000+01:00');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [signed_up], [created_at]) VALUES
(3,N'José Peña',N'jose@example.es',N'ES',0,'2023-03-21','2023-03-21T20:05:17.0000000+01:00');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [signed_up], [created_at]) VALUES
(4,N'李雷',N'lilei@example.cn',N'CN',1,'2023-05-09','2023-05-09T10:40:00.0000000+08:00');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [signed_up], [created_at]) VALUES
(5,N'Noah O''Brien',N'noah@example.ie',N'IE',1,NULL,'2023-06-30T15:00:00.0000000+01:00');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [signed_up], [created_at]) VALUES
(6,N'Amélie Laurent',N'amelie@example.fr',N'FR',1,'2024-01-02','2024-01-02T10:30:00.0000000+01:00');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [signed_up], [created_at]) VALUES
(7,N'Ravi Patel',N'ravi@example.in',N'IN',0,'2024-02-29','2024-03-01T05:29:59.0000000+05:30');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [signed_up], [created_at]) VALUES
(8,N'Sofia Rossi 🌻',N'sofia@example.it',N'IT',1,'2024-04-12','2024-04-12T14:12:12.0000000+02:00');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [status], [total], [items], [ordered_at], [shipped_at], [note], [details], [order_ref]) VALUES
(1,1,N'shipped',129.9000,3,'2024-03-01T10:00:00.0000000','2024-03-02T16:30:00.1234567',NULL,N'{"gift": false}',N'0b7a4c2e-3f1d-4e8a-9c55-1a2b3c4d5e6f');
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [status], [total], [items], [ordered_at], [shipped_at], [note], [details], [order_ref]) VALUES
(2,2,N'paid',54.0000,1,'2024-03-02T11:15:00.0000000',NULL,N'Gift wrap 🎁',N'{"gift": true, "wrap": "red"}',N'1c8b5d3f-4a2e-4f9b-8d66-2b3c4d5e6f70');
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [status], [total], [items], [ordered_at], [shipped_at], [note], [details], [order_ref]) VALUES
(3,1,N'cancelled',12.5000,1,'2024-03-03T09:45:00.0000000',NULL,N'Customer changed their mind',NULL,N'2d9c6e4a-5b3f-4a0c-9e77-3c4d5e6f7081');
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [status], [total], [items], [ordered_at], [shipped_at], [note], [details], [order_ref]) VALUES
(4,4,N'shipped',980.0000,12,'2024-03-05T02:10:00.0000000','2024-03-07T08:00:00.0000000',N'请小心轻放',N'{"fragile": true}',N'3e0d7f5b-6c4a-4b1d-8f88-4d5e6f708192');
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [status], [total], [items], [ordered_at], [shipped_at], [note], [details], [order_ref]) VALUES
(5,5,N'pending',45.7500,2,'2024-03-08T17:20:00.0000000',NULL,N'Leave at the door; ring twice',NULL,N'4f1e806c-7d5b-4c2e-9a99-5e6f708192a3');
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [status], [total], [items], [ordered_at], [shipped_at], [note], [details], [order_ref]) VALUES
(6,6,N'shipped',310.4000,5,'2024-03-10T13:00:00.0000000','2024-03-11T09:00:00.0000000',N'Fragile: "glass"',N'{"fragile": true}',N'50f2917d-8e6c-4d3f-8baa-6f708192a3b4');
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [status], [total], [items], [ordered_at], [shipped_at], [note], [details], [order_ref]) VALUES
(7,8,N'paid',76.2000,2,'2024-03-11T18:45:00.0000000',NULL,NULL,NULL,N'6103a28e-9f7d-4e40-9cbb-708192a3b4c5');
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [status], [total], [items], [ordered_at], [shipped_at], [note], [details], [order_ref]) VALUES
(8,2,N'shipped',19.9900,1,'2024-03-12T08:00:00.0000000','9999-12-31T23:59:59.9999999',N'Shipped date set to the maximum by an old import',NULL,N'7214b39f-a08e-4f51-8dcc-8192a3b4c5d6');
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [status], [total], [items], [ordered_at], [shipped_at], [note], [details], [order_ref]) VALUES
(9,3,N'shipped',64.0000,2,'2024-03-14T15:30:00.0000000','2024-03-15T10:00:00.0000000',N'Two parcels',N'{"parcels": [1, 2]}',N'8325c4a0-b19f-4062-9edd-92a3b4c5d6e7');
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [status], [total], [items], [ordered_at], [shipped_at], [note], [details], [order_ref]) VALUES
(10,7,N'paid',1499.0000,1,'2024-03-15T21:05:00.0000000',NULL,N'C:\Users\ravi\invoice.pdf',NULL,N'9436d5b1-c2a0-4173-8fee-a3b4c5d6e7f8');
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO

-- Indexes, foreign keys, counters and triggers, after the rows.
CREATE INDEX [idx_orders_customer] ON [dbo].[orders] ([customer_id]);
CREATE INDEX [idx_orders_status_date] ON [dbo].[orders] ([status], [ordered_at]);
CREATE UNIQUE INDEX [email] ON [dbo].[customers] ([email]);
ALTER TABLE [dbo].[orders] WITH NOCHECK ADD CONSTRAINT [FK_orders] FOREIGN KEY ([customer_id]) REFERENCES [dbo].[customers] ([id]);
BEGIN TRY ALTER TABLE [dbo].[orders] WITH CHECK CHECK CONSTRAINT [FK_orders]; END TRY BEGIN CATCH PRINT N'Foreign key ' + N'[FK_orders]' + N' has rows without a parent: it stays unchecked, and new rows are checked.'; END CATCH;
DECLARE @next decimal(38,0) = (SELECT MAX([id]) FROM [dbo].[orders]); IF @next IS NOT NULL BEGIN IF @next < 0 SET @next = 0; DBCC CHECKIDENT (N'[dbo].[orders]', RESEED, @next) WITH NO_INFOMSGS; END;
GO
DECLARE @next decimal(38,0) = (SELECT MAX([id]) FROM [dbo].[customers]); IF @next IS NOT NULL BEGIN IF @next < 0 SET @next = 0; DBCC CHECKIDENT (N'[dbo].[customers]', RESEED, @next) WITH NO_INFOMSGS; END;
GO
EXEC sys.sp_addextendedproperty @name = N'MS_Description', @value = N'People who bought at least once', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'customers';
GO

修正

  1. customers の "row_version" は SQL Server が自動で設定する行バージョンです。ダンプにはその値がないため、binary(8) にして空のままにします。

確認が必要

  • 2 件のビュー、トリガー、ルーチン、イベントは変換されません。レポートにそれぞれ記載しています。 SQL Server で手動で作り直してください。
  • orders のチェック制約 check1 は SQL Server 用に書き換えられないため (function isjson)、作成しません。 必要であれば、手動でチェック制約を書いてください。
  • orders のインデックス idx_orders_pending は SQL Server 用に書き換えられない式を使っているため (an index on an expression)、作成しません。 クエリに必要なら、手動でインデックスを作成してください。

ファイルはこのコンピューター上で変換され、アップロードされることはありません。

その他のサンプル:

ファイルとスクリプトで変わること

各行はコンバーターが適用するルールです。ルールによってデータが変わったときにレポートに書かれる行も示します。

  • bit

    bit

    同じ型です。

  • char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text, ntext

    nchar(n)、nvarchar(n)、nvarchar(max)、各列の照合順序付き

    nvarchar は varchar 列のコードページにかかわらず、すべての文字を保持できます。SQL Server 2017 にない UTF-8 照合順序は、対応する Unicode の照合順序になります。

  • column collations

    各列で同じ照合順序

    列は以前と同じように比較・並べ替えされ、一意キーも同じ行を区別します。

  • decimal(p,s), money, smallmoney

    decimal(p,s)、money は decimal(19,4)

    すべての桁を保ち、money は小数 4 桁のままです。

  • datetime, datetime2, smalldatetime

    datetime2(p)

    datetime2 は datetime と smalldatetime のすべての値を、1 年から同じ精度で保持できます。

  • datetimeoffset

    datetimeoffset、各値のオフセット付き

    同じ型と値です。

  • time

    time(p)

    同じ型です。

  • dates that aren't valid

    NULL

    日付ではない値は NULL になり、レポートで件数を示します。

    レポートの行: date_out_of_range

  • json (SQL Server 2025)

    nvarchar(max)

    JSON の値は同じで、SQL Server の JSON 関数で読めます。

  • uniqueidentifier

    uniqueidentifier

    同じ型です。

  • binary, varbinary, image

    binary(n)、varbinary(n)、varbinary(max)

    バイトはバイトのままです。

  • xml, sql_variant, hierarchyid, geometry, geography

    同じ型

    SQL Server 独自の型は保ちます。sql_variant の値はテキストを保つため、基本型は nvarchar になります。

  • rowversion, timestamp

    binary(8)、空

    rowversion 列にはコピーした行を入れられず、SSMS もその値をスクリプトに含めません。必要なら読み込み後に追加し直してください。

    レポートの行: rowversion_empty

  • IDENTITY

    IDENTITY、最大の ID の後から継続

    コピーした ID は IDENTITY_INSERT で読み込み、カウンターは最大の ID の後から続きます。

  • CREATE SEQUENCE

    同じオプションの CREATE SEQUENCE

    SQL Server のシーケンスも同じように動作します。SSMS はシーケンスの現在位置をスクリプトに含めないため、作成時の値から始まります。

  • computed columns

    同じ計算列、ソースと同じく PERSISTED

    式は同じで、変換先で計算します。

  • computed columns with functions IntoSQL doesn't write

    普通の列

    書き換えられない式は、普通の列とレポートの 1 行になります。SSMS は計算列の値をスクリプトに含めません。

    レポートの行: generated_not_translated

  • defaults with functions IntoSQL doesn't write, and NEXT VALUE FOR

    デフォルト値なし

    書き換えられないデフォルト値は含めず、レポートに記載します。

    レポートの行: default_not_translated

  • CHECK constraints

    変換済み

    チェック制約は同じで、各行の読み込み時に検証します。

  • CHECK constraints with functions IntoSQL doesn't write

    作成しない

    書き換えられないチェック制約は含めず、レポートに記載します。

    レポートの行: check_skipped

  • CHECK constraints added WITH NOCHECK or disabled

    作成しない

    SQL Server はこれらのチェックを適用していないため、行が違反している可能性があります。

    レポートの行: check_not_enforced

  • filtered and columnstore indexes

    作成しない

    IntoSQL が書き出すのは列全体に対する b-tree インデックスです。その他は読み込み後に作り直してください。

    レポートの行: index_skipped

  • foreign keys

    データの後に WITH NOCHECK で作成してからチェックし、孤立した行があれば警告

    キーは行の後に作成し、最後にチェックします。親のない行があれば、読み込みを止めずにキーを未チェックのまま残して警告します。

  • ON DELETE or ON UPDATE that cascades in a cycle or along a second path

    NO ACTION

    SQL Server はこれらのカスケードを拒否するため、ダンプに含まれることはありません。この行は手で編集したスクリプトのためのものです。

    レポートの行: foreign_key_action_dropped

  • foreign keys to tables the dump doesn't create

    作成しない

    キーは存在しないテーブルを参照できません。

    レポートの行: foreign_key_skipped

  • tables on a partition scheme

    すべてのパーティションの行を持つ 1 つのテーブル

    行は同じです。必要なら SQL Server でもう一度テーブルをパーティション分割してください。

    レポートの行: partitions_dropped

  • temporal tables (SYSTEM_VERSIONING)

    2 つのテーブル: 現在の行と履歴

    テーブルとその履歴テーブルは普通のテーブルとしてコピーします。リンクするには SYSTEM_VERSIONING を再度オンにしてください。

    レポートの行: system_versioning_dropped

  • NOT NULL columns with values that become NULL

    NOT NULL を削除

    値を NULL にする必要があった列は NOT NULL を保てません。保つと読み込みが止まります。

    レポートの行: not_null_relaxed

  • views, functions, procedures, triggers, synonyms, types and partition functions

    レポートに記載

    IntoSQL が変換するのはテーブルとその行です。それ以外は、元のスクリプトから作り直せるよう一覧にします。

    レポートの行: not_converted_objects

  • scripts without CREATE TABLE (data only)

    値から読み取った型

    データのみのスクリプトには行しかないため、型は値から決まります。

    レポートの行: no_schema

  • expressions in INSERT values

    NULL

    データベースを実行しないコンバーターでは、これらを評価できません。

    レポートの行: expression_value

  • types IntoSQL doesn't know

    nvarchar(max)

    テキストはどんな値も保持できます。読み込み後に型を変更してください。

    レポートの行: unknown_type

  • NUL characters in text

    保持

    nvarchar は NUL 文字を保持できるため、値はそのままコピーします。

  • text that isn't valid in its encoding

    不正なバイトを置換文字に

    スクリプトは UTF-8 なので、すべての値が有効なテキストである必要があります。

    レポートの行: invalid_utf8_replaced

  • text decoded twice (ñ)

    そのままコピー

    スクリプトにはまさにこの文字が含まれているため、そのままコピーし、レポートで指摘します。

    レポートの行: mojibake_suspected

ファイルではスクリプトではレポートの行
bitbit同じ型です。
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text, ntextnchar(n)、nvarchar(n)、nvarchar(max)、各列の照合順序付きnvarchar は varchar 列のコードページにかかわらず、すべての文字を保持できます。SQL Server 2017 にない UTF-8 照合順序は、対応する Unicode の照合順序になります。
column collations各列で同じ照合順序列は以前と同じように比較・並べ替えされ、一意キーも同じ行を区別します。
decimal(p,s), money, smallmoneydecimal(p,s)、money は decimal(19,4)すべての桁を保ち、money は小数 4 桁のままです。
datetime, datetime2, smalldatetimedatetime2(p)datetime2 は datetime と smalldatetime のすべての値を、1 年から同じ精度で保持できます。
datetimeoffsetdatetimeoffset、各値のオフセット付き同じ型と値です。
timetime(p)同じ型です。
dates that aren't validNULL日付ではない値は NULL になり、レポートで件数を示します。date_out_of_range
json (SQL Server 2025)nvarchar(max)JSON の値は同じで、SQL Server の JSON 関数で読めます。
uniqueidentifieruniqueidentifier同じ型です。
binary, varbinary, imagebinary(n)、varbinary(n)、varbinary(max)バイトはバイトのままです。
xml, sql_variant, hierarchyid, geometry, geography同じ型SQL Server 独自の型は保ちます。sql_variant の値はテキストを保つため、基本型は nvarchar になります。
rowversion, timestampbinary(8)、空rowversion 列にはコピーした行を入れられず、SSMS もその値をスクリプトに含めません。必要なら読み込み後に追加し直してください。rowversion_empty
IDENTITYIDENTITY、最大の ID の後から継続コピーした ID は IDENTITY_INSERT で読み込み、カウンターは最大の ID の後から続きます。
CREATE SEQUENCE同じオプションの CREATE SEQUENCESQL Server のシーケンスも同じように動作します。SSMS はシーケンスの現在位置をスクリプトに含めないため、作成時の値から始まります。
computed columns同じ計算列、ソースと同じく PERSISTED式は同じで、変換先で計算します。
computed columns with functions IntoSQL doesn't write普通の列書き換えられない式は、普通の列とレポートの 1 行になります。SSMS は計算列の値をスクリプトに含めません。generated_not_translated
defaults with functions IntoSQL doesn't write, and NEXT VALUE FORデフォルト値なし書き換えられないデフォルト値は含めず、レポートに記載します。default_not_translated
CHECK constraints変換済みチェック制約は同じで、各行の読み込み時に検証します。
CHECK constraints with functions IntoSQL doesn't write作成しない書き換えられないチェック制約は含めず、レポートに記載します。check_skipped
CHECK constraints added WITH NOCHECK or disabled作成しないSQL Server はこれらのチェックを適用していないため、行が違反している可能性があります。check_not_enforced
filtered and columnstore indexes作成しないIntoSQL が書き出すのは列全体に対する b-tree インデックスです。その他は読み込み後に作り直してください。index_skipped
foreign keysデータの後に WITH NOCHECK で作成してからチェックし、孤立した行があれば警告キーは行の後に作成し、最後にチェックします。親のない行があれば、読み込みを止めずにキーを未チェックのまま残して警告します。
ON DELETE or ON UPDATE that cascades in a cycle or along a second pathNO ACTIONSQL Server はこれらのカスケードを拒否するため、ダンプに含まれることはありません。この行は手で編集したスクリプトのためのものです。foreign_key_action_dropped
foreign keys to tables the dump doesn't create作成しないキーは存在しないテーブルを参照できません。foreign_key_skipped
tables on a partition schemeすべてのパーティションの行を持つ 1 つのテーブル行は同じです。必要なら SQL Server でもう一度テーブルをパーティション分割してください。partitions_dropped
temporal tables (SYSTEM_VERSIONING)2 つのテーブル: 現在の行と履歴テーブルとその履歴テーブルは普通のテーブルとしてコピーします。リンクするには SYSTEM_VERSIONING を再度オンにしてください。system_versioning_dropped
NOT NULL columns with values that become NULLNOT NULL を削除値を NULL にする必要があった列は NOT NULL を保てません。保つと読み込みが止まります。not_null_relaxed
views, functions, procedures, triggers, synonyms, types and partition functionsレポートに記載IntoSQL が変換するのはテーブルとその行です。それ以外は、元のスクリプトから作り直せるよう一覧にします。not_converted_objects
scripts without CREATE TABLE (data only)値から読み取った型データのみのスクリプトには行しかないため、型は値から決まります。no_schema
expressions in INSERT valuesNULLデータベースを実行しないコンバーターでは、これらを評価できません。expression_value
types IntoSQL doesn't knownvarchar(max)テキストはどんな値も保持できます。読み込み後に型を変更してください。unknown_type
NUL characters in text保持nvarchar は NUL 文字を保持できるため、値はそのままコピーします。
text that isn't valid in its encoding不正なバイトを置換文字にスクリプトは UTF-8 なので、すべての値が有効なテキストである必要があります。invalid_utf8_replaced
text decoded twice (ñ)そのままコピースクリプトにはまさにこの文字が含まれているため、そのままコピーし、レポートで指摘します。mojibake_suspected

スクリプトを SQL Server に読み込む

スクリプトはテーブルを作成して行をコピーしてから、キー、インデックス、外部キーを追加します。そのため読み込みが速く、最初のエラーで止まります。

sqlcmd -b -f 65001 -S localhost -d mydb -i sql_server.sql_server.sql

外部キーは WITH NOCHECK で追加してからチェックします。存在しない行を参照している行があれば、途中で失敗する代わりに、どの制約かをスクリプトが示し、その制約は未チェックのまま残します。

大きなダンプでは、サーバーと同じマシンで sqlcmd を実行してください。最大 1000 行のバッチごとにコミットするため、トランザクションログは小さいままです。

SQL Server を最適な方法でダンプする

コンバーターはダンプの内容を読み取ります。次のオプションを使うと、より多くのデータがダンプに残ります。

  • SSMS でデータベースを右クリックし、[タスク]、[スクリプトの生成] を選んでテーブルを選択します。dbatools、mssql-scripter など同じライブラリを使うツールも同じスクリプトを書き出します。
  • [詳細設定] で [スクリプトを作成するデータの種類] を [スキーマとデータ] にします。スキーマだけのスクリプトでは、テーブルに行がありません。
  • SSMS のデフォルトである Unicode、または UTF-8 で保存します。どちらも同じように読み込め、gzip も使えます。

変換されないもの

ビュー、トリガー、プロシージャ、関数など SQL Server 独自の言語で書かれたオブジェクトは、黙って削除されることなくレポートに名前で記載されます。読み込む先の SQL Server のバージョンで確認してから作り直せます。

SQL Server のバージョン間の移行に関する質問

ここに答えがない場合は、お問い合わせページからご連絡ください。担当者が返信します。 お問い合わせページ

ダンプはアップロードされますか?

いいえ。コンバーターはブラウザ上で動作し、ダンプをディスクから少しずつ読み込むため、ダンプがコンピューターの外に出ることはありません。デスクトップアプリとコマンドラインも、お使いのコンピューター上で変換します。

ダンプはどのくらいの大きさまで扱えますか?

コンバーターはダンプ全体をメモリに保持しません。ファイルを範囲ごとに 2 回読み、読みながらスクリプトを書き出します。数 GB のダンプも、ブラウザ、デスクトップアプリ、コマンドラインで変換できます。

SSMS が保存する UTF-16 のファイルを読めますか?

はい。SSMS はデフォルトでスクリプトを UTF-16 で保存しますが、コンバーターは UTF-16 も UTF-8 も、gzip の有無にかかわらず、バッチ間の GO を含めて同じように読み込みます。

どの SQL Server バージョンのスクリプトに対応していますか?

SQL Server 2017 以降から SSMS、dbatools、mssql-scripter で書き出したスクリプトです。すべてのテスト用スクリプトは SQL Server 2017、2022、2025 で作成し、ソースとセル単位で比較しています。

IDENTITY の値は保持されますか?

はい。IDENTITY 列は IDENTITY_INSERT で読み込み、すべての行が ID を保ち、カウンターは最大の ID の後から続きます。シーケンスは同じオプションで作成します。

money、datetimeoffset など SQL Server の型はどうなりますか?

そのままです。xml、sql_variant、hierarchyid、geometry、geography も含まれ、すべてのテキスト列は照合順序を保ちます。datetimeoffset の値はオフセットを保ちます。rowversion 列は、スクリプトに値がないため binary(8) になります。

プロシージャ、トリガー、ビューはどうなりますか?

変換はせず、レポートに名前で一覧します。テーブルを読み込んだ後に、元のスクリプトの該当部分を実行できます。

スクリプトはどの SQL Server バージョンで読み込めますか?

スクリプトを書き出したバージョンにかかわらず、SQL Server 2017 から 2025 です。同じスクリプトをそれぞれで読み込み、問題があれば最初のエラーで止まります。