Первичный ключ обновления SQL Server это - также внешний ключ в двух таблицах

Как насчет этой невероятно злой реализации?

array.h

#define IMPORT_ARRAY(TYPE)    \
    \
struct TYPE##Array {    \
    TYPE* contents;    \
    size_t size;    \
};    \
    \
struct TYPE##Array new_##TYPE##Array() {    \
    struct TYPE##Array a;    \
    a.contents = NULL;    \
    a.size = 0;    \
    return a;    \
}    \
    \
void array_add(struct TYPE##Array* o, TYPE value) {    \
    TYPE* a = malloc((o->size + 1) * sizeof(TYPE));    \
    TYPE i;    \
    for(i = 0; i < o->size; ++i) {    \
        a[i] = o->contents[i];    \
    }    \
    ++(o->size);    \
    a[o->size - 1] = value;    \
    free(o->contents);    \
    o->contents = a;    \
}    \
void array_destroy(struct TYPE##Array* o) {    \
    free(o->contents);    \
}    \
TYPE* array_begin(struct TYPE##Array* o) {    \
    return o->contents;    \
}    \
TYPE* array_end(struct TYPE##Array* o) {    \
    return o->contents + o->size;    \
}

main.c

#include <stdlib.h>
#include "array.h"

IMPORT_ARRAY(int);

struct intArray return_an_array() {
    struct intArray a;
    a = new_intArray();
    array_add(&a, 1);
    array_add(&a, 2);
    array_add(&a, 3);
    return a;
}

int main() {
    struct intArray a;
    int* it;
    int* begin;
    int* end;
    a = return_an_array();
    begin = array_begin(&a);
    end = array_end(&a);
    for(it = begin; it != end; ++it) {
        printf("%d ", *it);
    }
    array_destroy(&a);
    getchar();
    return 0;
}
31
задан NMan 4 September 2009 в 14:07
поделиться

3 ответа

Вы можете:

  1. временно отключить принудительное применение ограничений FK (см. здесь или здесь )
  2. обновить ваш PK
  3. обновить ваш Клавиши FK
  4. позволяют принудительно применять ограничения FK

, делают все это внутри транзакции и гарантируют, что в случае сбоя транзакции вы откатите ее должным образом и по-прежнему применяете ограничения FK.

Но ... зачем вам это нужно. поменять ПК? Я надеюсь, что это действие выполняется редко (импорт устаревших данных или что-то в этом роде).

22
ответ дан 27 November 2019 в 20:00
поделиться

- создают Г Новую строку с теми же данными и Г другим первичным ключом. - обновляют все chiddren таблицы. - удаляют строку что Вы repeded ее данные И ее сделанный.

0
ответ дан 27 November 2019 в 20:00
поделиться

Используют ли ваши отношения

ON UPDATE CASCADE 

. Если они затем изменяют ключ в первичной таблице, обновляются внешние ключи.

например,

ALTER TABLE Books 
ADD CONSTRAINT fk_author 
FOREIGN KEY (AuthorID) 
REFERENCES Authors (AuthorID) ON UPDATE CASCADE 
44
ответ дан 27 November 2019 в 20:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: