这个问题很可能是一个 T-SQL 问题,但是 SQL 是从 Entity Framework Core 2.1.3 生成的
下面的代码在DocumentType_Id
( Invalid column name ) 上出错,这是因为在以后的迁移中,该DocumentType_Id
列已被重命名,但为什么它甚至解析内部内容,因为
SELECT *
FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'OldMigration'
返回某些内容,然后根本不应该执行 BEGIN 和 END 之间的任何内容。
我的猜测是 T-SQL 是如何解析代码的。如果我这样做并用垃圾语句替换 BEGIN END 之间的代码,它就可以工作。columnDocumentType_Id
列存在于数据库中其他位置的另一个表中(其他表,无键连接)。
IF NOT EXISTS (SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'OldMigration')
BEGIN
UPDATE D
SET D.FileName = REPLACE(FileName, '.rtf', '.pdf')
FROM dbo.Document AS D
INNER JOIN
(SELECT group_id, MAX(version) version
FROM dbo.document doc
WHERE doc.DocumentType_Id = 1
AND doc.Description = 'WrongReport'
AND doc.ContentType = 'application/pdf'
GROUP BY doc.group_id) maxLockedDoc ON maxLockedDoc.group_id = d.group_id
AND d.Version > maxLockedDoc.version
AND d.DocumentType_Id = 1
AND d.ContentType = 'application/pdf'
END;
这个有效,悲伤不存在
IF NOT EXISTS (SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'OldMigration')
BEGIN
SELECT *
FROM sadsad
END
有什么建议和/或想法来解决这个问题吗?