我正在尝试使用 SqlCommandProvider(FSharp.Data.SqlClient 的一部分)创建一个列,如果它不存在,然后设置一个约束(自引用)。问题是它不会编译,因为它检测到作为约束的一部分的列还不存在。我尝试将其包装在另一个 IF 块中,但无济于事。
[<Literal>]
let CreateParentColumn = "
IF COL_LENGTH('Company', 'ParentId') IS NULL
BEGIN
ALTER TABLE Company
ADD ParentId INT
ALTER TABLE Company
ADD CONSTRAINT FK_ParentIdCompanyId FOREIGN KEY (ParentId)
REFERENCES Company(CompanyId);
END
"
type CreateParentIdColumn = SqlCommandProvider<CreateParentColumn, connectionString>
我非常希望不使用动态 sql。我想知道是否有办法推迟评估以使其正常运行(注意,查询本身在 SQL Management Studio 中运行良好)
错误 1 类型提供程序 'FSharp.Data.SqlCommandProvider' 报告错误:外键 'FK_ParentIdCustomerId' 在引用表 'Company' 中引用了无效列 'ParentId'。无法创建约束。请参阅以前的错误。