Explication de l'erreur Oslo «M2037: Erreur interne à la génération SQL: Générateur manquant pour la variable»?

StackOverflow https://stackoverflow.com/questions/253746

  •  05-07-2019
  •  | 
  •  

Question

Dans Microsoft Oslo SDK CTP 2008 (à l'aide de Intellipad), le code suivant est bien compilé:

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*;

}

et génère la sortie Reach SQL suivante:

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

Mais après avoir modifié la ligne commentée dans le module T comme suit

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

le message d'erreur " M2037: Erreur interne à la génération SQL: générateur manquant pour la variable 'A' " s'affiche (dans la fenêtre Reach SQL de Intellipad).

Des idées?

Cordialement, Tamberg

Était-ce utile?

La solution

Je pense que ce que vous voulez, c'est:

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)*;

Notez que les contraintes concernent les externes, pas les types ici. J'ai pu obtenir un code similaire lorsque les contraintes s'appliquaient aux types mais que je ne pouvais pas approfondir plus d'une relation. Les déplacer vers les externes semble correct et génère le SQL Reach attendu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top