1

Microsoft Oslo SDK CTP 2008 (Intellipad を使用) では、次のコードは正常にコンパイルされます。

module T {

    type A {
        Id : Integer32 = AutoNumber();
    } where identity Id;

    As : A*;

    type B {
        Id : Integer32 = AutoNumber();
//        A : A;
//    } where A in As && identity Id;
    } where identity Id;

    Bs : B*;

    type C {
        Id : Integer32 = AutoNumber();
        B : B;
    } where B in Bs && identity Id;

    Cs : C*;

}

次の Reach SQL 出力が生成されます。

set xact_abort on;
go

begin transaction;
go

set ansi_nulls on;
go

create schema [T];
go

create table [T].[As]
(
    [Id] int not null identity,
    constraint [PK_As] primary key clustered ([Id])
);
go

create table [T].[Bs]
(
    [Id] int not null identity,
    constraint [PK_Bs] primary key clustered ([Id])
);
go

create table [T].[Cs]
(
    [Id] int not null identity,
    [B] int not null,
    constraint [PK_Cs] primary key clustered ([Id]),
    constraint [FK_Cs_B_T_Bs] foreign key ([B]) references [T].[Bs] ([Id])
);
go

commit transaction;
go

ただし、モジュール T のコメント行を次のように変更した後

        A : A;
    } where A in As && identity Id;
//    } where identity Id;

エラー メッセージ "M2037: SQL Generation Internal Error: Missing generator for variable 'A'" が (Intellipad の Reach SQL ウィンドウに) 表示されます。

何か案は?

よろしく、タンバーグ

4

2 に答える 2

1

あなたが望むのは次のとおりだと思います:

type A {
    Id : Integer32 = AutoNumber();
} where identity Id;

As : A*;

type B {
    Id : Integer32 = AutoNumber();
    A : A;
} where identity Id;

Bs : (B where value.A in As)*;

type C {
    Id : Integer32 = AutoNumber();
    B : B;
} where identity Id && B in Bs;

Cs : (C where value.B in Bs)*;

ここでの型ではなく、externs に制約があることに注意してください。タイプの制約が複数の関係を深くすることができない場合、同様のコードを取得できました。それらを extern に移動することは正しいようで、期待される Reach SQL を生成します。

于 2008-10-31T18:37:29.457 に答える
0

http://social.msdn.microsoft.com/Forums/en-US/oslo/thread/05103bf8-4e0f-4976-bcdd-2c724cb08738/

于 2008-10-31T21:00:05.300 に答える