私はデータ移行を行っており、現在、最悪のシナリオに備えてリバース スクリプトを実装しています。私は今少し疲れているかもしれませんが、このことについて頭を悩ませることはできません - あなたが助けてくれるかもしれません.
私は次のSQLを持っています:
IF NOT EXISTS(SELECT * FROM sys.columns WHERE Name = N'FileId' AND Object_ID = Object_ID(N'[FileData]'))
AND EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'FileData'
AND COLUMN_NAME = 'FileDataId')
BEGIN
SELECT 1;
--ALTER TABLE [FileData] ADD [FileId] [uniqueidentifier] NULL
--ALTER TABLE [FileData] DROP CONSTRAINT PK_FileData
--UPDATE [FileData] SET [FileData].[FileId] = [File].[FileId]
--FROM [FileData] INNER JOIN [File] on [FileData].FileDataId = [File].FileData
--ALTER TABLE [FileData] ALTER COLUMN [FileId] [uniqueidentifier] NOT NULL
--ALTER TABLE [FileData] ADD CONSTRAINT PK_FileData PRIMARY KEY (FileId)
END
ELSE
BEGIN
SELECT 0;
END
FileName
上記のクエリを実行すると、一貫して 0 が返されます。列は存在し、存在しないため、これは正しいFileDataId
ことです。ここまでは順調ですね。
最初のステートメントを削除しselect
、alter および update コードのコメントを外します。エラーが発生します:
無効な列名 'FileDataId'
コメント解除後に実行するクエリ
IF NOT EXISTS(SELECT * FROM sys.columns WHERE Name = N'FileId' AND Object_ID = Object_ID(N'[FileData]'))
AND EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'FileData'
AND COLUMN_NAME = 'FileDataId')
BEGIN
ALTER TABLE [FileData] ADD [FileId] [uniqueidentifier] NULL
ALTER TABLE [FileData] DROP CONSTRAINT PK_FileData
UPDATE [FileData] SET [FileData].[FileId] = [File].[FileId]
FROM [FileData] INNER JOIN [File] on [FileData].FileDataId = [File].FileData
ALTER TABLE [FileData] ALTER COLUMN [FileId] [uniqueidentifier] NOT NULL
ALTER TABLE [FileData] ADD CONSTRAINT PK_FileData PRIMARY KEY (FileId)
END
ELSE
BEGIN
SELECT 0;
END
私の質問: IF ステートメントから
一貫して同じ結果が得られるのはなぜですか? -節のコードのコメントを外すと、突然入力されます。ここで何かが完全に欠けていますか?false
true