• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:リレーションシップ更新)

リレーションシップ更新

jamshid6の回答

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.3

以下のような構造で試しましたが、再現しません。 SQL ExpressはSP2あたっているみたいですし、Accessは2000でも再現しませんでした。 CREATE TABLE [dbo].[TBLA]( [KEY1] [int] NOT NULL, [KEY2] [int] NOT NULL) GO ALTER TABLE TBLA ADD CONSTRAINT [PKA] PRIMARY KEY CLUSTERED (KEY1,KEY2) GO CREATE TABLE [dbo].[TBLB]( [KEY1] [int] NOT NULL, [KEY2] [int] NOT NULL, [KEY3] [nvarchar](6) NOT NULL) GO ALTER TABLE TBLB ADD CONSTRAINT [PKB] PRIMARY KEY CLUSTERED (KEY1,KEY2,KEY3) GO CREATE TABLE [dbo].[TBLC]( [KEY1] [int] NOT NULL, [KEY2] [int] NOT NULL, [KEY3] [nvarchar](6) NOT NULL, [KEY4] [nvarchar](15) NOT NULL) GO ALTER TABLE TBLC ADD CONSTRAINT [PKC] PRIMARY KEY CLUSTERED (KEY1,KEY2,KEY3,KEY4) GO CREATE TABLE [dbo].[TBLD]( [KEY1] [int] NOT NULL, [KEY2] [int] NOT NULL, [KEY3] [nvarchar](6) NOT NULL, [KEY4] [nvarchar](15) NOT NULL, [KEY5] [nvarchar](6) NOT NULL) GO ALTER TABLE TBLD ADD CONSTRAINT [PKD] PRIMARY KEY CLUSTERED (KEY1,KEY2,KEY3,KEY4,KEY5) GO ALTER TABLE TBLB ADD CONSTRAINT [FKB] FOREIGN KEY (KEY1,KEY2) REFERENCES TBLA (KEY1,KEY2) ON UPDATE CASCADE GO ALTER TABLE TBLC ADD CONSTRAINT [FKC] FOREIGN KEY (KEY1,KEY2,KEY3) REFERENCES TBLB (KEY1,KEY2,KEY3) ON UPDATE CASCADE GO ALTER TABLE TBLD ADD CONSTRAINT [FKD] FOREIGN KEY (KEY1,KEY2,KEY3,KEY4) REFERENCES TBLC (KEY1,KEY2,KEY3,KEY4) ON UPDATE CASCADE GO こうなると、どうも外部キーがうまくかかっていないとしか思えないのですが、そこを確認していただきたいです。 外部キーを右クリックして「名前をつけてキーをスクリプト化」を選ぶと、CREATEとDROPしか選べませんが、CREATEの方のスクリプトを生成して中身が実質上のようになっているかどうか確認してみてください(WITH CHECKとかCHECK CONSTRAINTも書き出されますがそこは無視して結構です)。 なお、924012はSSAS(Analysis Service)に関するものですので、今回のとは関係ないと思います。

MIURA0802
質問者

お礼

いつも有難うございます。 外部KEYのスクリプト化でCREATEで出来たデータをとりましたが内容が違うので動かないのでしょうね。取りあえず下記に貼り付けましたので宜しくお願いします。尚、教えて頂いた部分によく似たスクリプトはテーブルを右クリックし名前を付けてスクリプト化すると表示されていました。 (TBLAの外部キー部分) 外部キーはありません。 (TBLBの外部キー部分) USE [sqltesSQL] GO ALTER TABLE [dbo].[TBLB] WITH NOCHECK ADD CONSTRAINT [TBLB_FK00] FOREIGN KEY([key1], [key2]) REFERENCES [dbo].[TBLA] ([key1], [key2]) GO ALTER TABLE [dbo].[TBLB] NOCHECK CONSTRAINT [TBLB_FK00] (TBLCの外部キー部分) USE [sqltesSQL] GO ALTER TABLE [dbo].[TBLC] WITH NOCHECK ADD CONSTRAINT [TBLC_FK00] FOREIGN KEY([key1], [key2], [key3]) REFERENCES [dbo].[TBLB] ([key1], [key2], [key3]) GO ALTER TABLE [dbo].[TBLC] NOCHECK CONSTRAINT [TBLC_FK00] (TBLDの外部キー部分) USE [sqltesSQL] GO ALTER TABLE [dbo].[TBLD] WITH NOCHECK ADD CONSTRAINT [TBLD_FK00] FOREIGN KEY([key1], [key2], [key3], [key4]) REFERENCES [dbo].[TBLC] ([key1], [key2], [key3], [key4]) GO ALTER TABLE [dbo].[TBLD] NOCHECK CONSTRAINT [TBLD_FK00]

MIURA0802
質問者

補足

毎回ご返事ありがとうございます。 職場でしか環境がないので申し訳ございませんが休み明けに確認したいと思います。又、報告させて頂きますので最後までお付き合い願います。本当にありがとうございます。

関連するQ&A

  • sqlserverの場合はテーブルの連結した状態では更新できないのでしょうか

    accessユーザーです sqlserver2005にアップサイジングしたあと修正をしていますが accessの場合クエリおよびsqlのprgで作成したテーブルの連結リレーショナルで更新ができていたのですが sqlserverの場合はテーブルの連結した状態では更新できないのでしょうか ご教授おねがいします

  • SQLServer2005ExpressEditionのことで

    SQLServer2005ExpressEdition(無償版)でのAccessからのアップサイジングは可能かどうかご存知のかたいらっしゃいますか? Accessのアップサイジングを考えております。どなたかお教えください。

  • Accessからのアップサイジング

    SQLServer2005ExpressEdition(無償版)でのAccessからのアップサイジングは可能かどうかご存知のかたいらっしゃいますか? アップサイジングの方法は 各ファイルをアップサイジングウィザードに従って、進めていけばいいのですよね??

  • リレーションシップについて。

    2つのテーブルをリレーションシップ設定することによって、レコードの更新は出来るのですがレコードの追加が出来ません。ODBC経由でACCESS2000へ2つのテーブルをアタッチして操作しています。 レコードの追加は出来ないのでしょうか?よろしくお願いします。 サーバ:W2000SEREVER_SP4 SQL Server 2005 Enterprise Edition クライアント:W2000PRO_SP4 ACCESS2000_SP3

  • Accessのアップサイジングウィザード

    Accessのアップサイジングウィザードを使用し、SQLServerへ テーブルとデータを移行しようと考えています。 Access2000、SQL Server 2005 Express Editionを使用して います。 アップサイジングウィザードで「既存のデータベースを使用する」 を選択すると移行できるのですが、「新しいデータベースを作成 する」を選択すると、移行できません。レポートに「Table was skipped or export failed」と表示されます。 (ログインユーザはcreate table権限があります。) アップサイジングウィザードの手順書には、、「新しいデータベース を作成する」を選択すると書いてあるので、うまくいかない理由を 知りたいと思います。 宜しくお願い致します。

  • ストアド更新履歴

    ストアドの更新履歴情報を簡単に見る方法ご存知の方、教えて下さい。 SQLServer2005を使っています。(Editionは不明 > 何処から確認するかわからなかったため。express editionではないです。)

  • エクセルのデータをアクセスのテーブルにインポート

    エクセルのデータをアクセスのテーブルにインポートしたくて、 アクセスから外部データのインポートでエクセルを指定してるのですが ************************************************************************ ワークシート インポートウィザード インデックス、主キー、またはリレーションシップで重複する値が生成されてるため、 テーブルを変更できませんでした。 重複する値のあるフィールドの値を変更するか、インデックスを削除してください。または重複する値を使用できるように再定義してください。 ************************************************************************ になってしまいます。 エクセルの列名を見ても重複していないし(COUNTIF関数で確認しました) アクセス側のウィザードでインデックスはどこのフィールドにもつけてないし、 「主キーを設定しない」もしくは「主キーを自動的に設定する」にしているのに、何をやっても上記のエラーがでます。 ググっても同じようなエラー内容が見つからないのですが、どうしたらいいでしょう? ヴァージョンはエクセルは2007、アクセスは2010です。バージョンの相違が原因でしょうか?

  • accessでのリンクテーブルの更新

    いつもお世話になっております。 AccessからSQLServerのテーブルにリンクをはっています。 このリンクテーブルをupdate文で更新したいのですが、 「更新可能なクエリであることが必要」とでています。 以前にも類似の質問をしました。 http://okwave.jp/qa/q6581636.html しかし、いったん解決したのですが、別のところで同様の現象が でてしまいました。 調べると、リンク先のSQLServerのテーブルにはキーが存在していて、 Access側からリンクするときには自動的に一意設定されてしまいます。 発行したいupdate文はこのキーとは別の項目が一意になっていないと だめな条件付けがされているのです。 リンクをはるときに、SQLServer側ですでに設定されているキーとは 違った項目を一意項目として選択する方法はあるのでしょうか? 調べてみると、まったくキーのないテーブルをリンクするときは当然、 一意な項目を選べるのですが、キーがすでにある場合はだめな ようでした。 毎度のことでお手数なのですが、どうかよろしくお願い申し上げます。

  • Accessのリレーションシップ

    Access初心者です。 Access2010でデータベースを作っていて、行き詰ってしまいました。 テーブル1にフィールドABCDEFがあって、Aに主キーが付いています。(Aはテキスト型でフィールドサイズ10です。) テーブル2にはフィールドAGHがあり、Aに主キーが付いてます。(Aはテーブル1と同じです。) テーブル3にも同じくフィールドAIJがあり、Aに主キーが付いています。(Aはテーブル1と同じです。) テーブル1のフィールドAを主テーブルとし、テーブル2・3のフィールドAにリレーションを組んでいます。 この時のリレーションシップで参照整合性と連鎖更新と連鎖削除にチェックを入れ、種類が一対一になりました。 その後、テーブル1でレコードを追加しようとすると、「テーブル'2'にリレーションシップが設定されたレコードが必要なので、レコードの追加や変更を行うことができません。」と出ます。 これを解決する方法はどうするのか、お教えお願いします。 分かりにくい説明ですいません。

  • GoogleChromeは自動更新するの?

    Android版のGoogleChromeは手動、自動で更新されるのは知っています。Win11PC版GoogleChromeの手動更新の方法は分かっていますが、タスクスケジュールにより、自動更新されるのでしょうか?更新パッチが配布されてから遅れて更新されるのだとは思いますが、教えてください。