我正在进行数据迁移,目前正在为最坏的情况实施反向脚本。我现在可能有点累了,但我无法理解这件事——所以也许你可以帮忙。
我有以下 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
运行上面的查询将始终返回 0 - 这是正确的,因为该FileName
列确实存在而 不存在FileDataId
。到目前为止,一切都很好。
当我删除第一select
条语句并取消注释更改和更新代码时。我得到错误:
列名“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
我的问题:
为什么我总是false
从 IF 语句中得到相同的结果,但是当我取消注释 - 子句中的代码时,true
它突然被输入了。我在这里完全错过了什么吗?