0

这个问题很可能是一个 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

有什么建议和/或想法来解决这个问题吗?

4

0 回答 0