none
Check Constraint zwischen tabellen RRS feed

  • Frage

  • hi, ich hab ein verständnisproblem bei der syntax in der dialog box ...
    In TSQL würe die bedingung (tblA.fkID & tblB.pkID) > 0 lauten - wie müsste das in der box dann stehen?
    weder die hilfe noch bing werfen was brauchbares oder ein beispiel aus.
    danke, christian
    Dienstag, 18. August 2009 09:10

Antworten

  • Bei einfachen Constraints wiederrum wüsste ich gerade nicht, wie man auf andere Tabellen referenziert (wobei ich nicht alles weiß ;-) ).
    So zum Beispiel:

    CREATE TABLE dbo.t
    (
        c int
    );
    GO
    
    CREATE FUNCTION dbo.u() RETURNS int
    AS
    BEGIN
    RETURN
        (SELECT
            MAX(c)
        FROM
            dbo.t)
    END
    GO
    
    CREATE TABLE dbo.t1
    (
        c1 int
        CONSTRAINT C_t1_c1 CHECK(c1 > dbo.u())
    );
    
    INSERT INTO dbo.t SELECT 10;
    INSERT INTO dbo.t1 SELECT 11 --succeeds
    INSERT INTO dbo.t1 SELECT 9 --fails
    Ob das allerdings Sinn macht, liegt im Auge des Betrachters.

    -- Frank Kalis Microsoft SQL Server MVP Webmaster: http://www.insidesql.org
    Dienstag, 18. August 2009 20:42

Alle Antworten

  • Hallo cm_vsl,

    diese "Dialog Box" finde ich nur, wenn man ein einfaches Constraint anlegen will, nicht bei Foreign Key Constrains.
    Bei einfachen Constraints wiederrum wüsste ich gerade nicht, wie man auf andere Tabellen referenziert (wobei ich nicht alles weiß ;-) ).
    Wie sieht es bei Dir konkret in T-SQL aus?
    Was & wie (wo) genau machst Du, damit ich es nachvollziehen kann.

    Bis dann,
    Olaf Helper
    Olaf Helper [COLOR="Silver"][SIZE="1"][/SIZE] [SIZE="1"][/SIZE][/COLOR] * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Dienstag, 18. August 2009 19:03
  • Bei einfachen Constraints wiederrum wüsste ich gerade nicht, wie man auf andere Tabellen referenziert (wobei ich nicht alles weiß ;-) ).
    So zum Beispiel:

    CREATE TABLE dbo.t
    (
        c int
    );
    GO
    
    CREATE FUNCTION dbo.u() RETURNS int
    AS
    BEGIN
    RETURN
        (SELECT
            MAX(c)
        FROM
            dbo.t)
    END
    GO
    
    CREATE TABLE dbo.t1
    (
        c1 int
        CONSTRAINT C_t1_c1 CHECK(c1 > dbo.u())
    );
    
    INSERT INTO dbo.t SELECT 10;
    INSERT INTO dbo.t1 SELECT 11 --succeeds
    INSERT INTO dbo.t1 SELECT 9 --fails
    Ob das allerdings Sinn macht, liegt im Auge des Betrachters.

    -- Frank Kalis Microsoft SQL Server MVP Webmaster: http://www.insidesql.org
    Dienstag, 18. August 2009 20:42
  • Hallo Frank,

    ok, mit einem kleinen Umweg über eine UDF; das kenne ich auch.

    Und die Constraint-Bedingung "c1 > dbo.u()" kann man dann auch so in die Dialog Box vom SSMS eingeben.
    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Mittwoch, 19. August 2009 04:43
  • Hallo cm_vsl,

    Hat Dir die Antwort geholfen?

    Grüße,
    Robert

    Sonntag, 6. September 2009 09:38
    Moderator
  • Hallo cm_vsl,

    Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
    Solltest Du noch "Rückfragen" dazu haben, so gebe uns bitte Bescheid.

    Grüße,
    Robert

    Mittwoch, 9. September 2009 15:04
    Moderator