正しい構文を使用しているかどうかわかりませんが、1つのテーブルに入力しようとしていて、次に外部キーを持つ別のテーブルを入力しようとしています。 tbl1SentEmails
の主キーはtbl1Recipients
の外部キーとして使用されます。私はこれをストアドプロシージャに入れましたが、私は外部キーの制約を述べているエラーを受けています。これを修正する方法はありますか?ストアドプロシージャの外部キー制約
ストアドプロシージャのコード:
-- This is the sample script to test the SP
-- An instance of the Table parameter type is created
Declare @SampelData As [dbo].[SampleDataType]
Declare @RecData As [dbo].[SampleRecType]
Insert Into @SampelData(strEmailSendID, dtmSent, strSubject, strBody, strConversationID, strConversationTopic, strConversationIndex, dtmReplied, dtmOpened, dtmClicked, blnTrackOpens, blnTrackClicks, blnTrackReplies, lngMergeID, blnHide)
Values ('ce4d29160fae4eba92c7d233723f6f59', '2016-11-08', 'strSubject', 'strBody','strConversationID', 'strConversationTopic', 'strConversationIndex', '2016-11-08', '2016-11-08', '2016-11-08', 'true', 'true', 'true', 69164, 'true')
SELECT * FROM @SampelData
Insert Into RecData(strEmailSendID, strEmailAddress, strDisplayName, strRecipientType)
Values ('ce4d29160fae4eba92c7d233723f6f59','[email protected]','Alvindra Dutt','TO')
Select * From @RecData
-- we then call the SP to store the values
Exec SampleProcedure @SampelData,@RecData
私はMVCアプリケーションからこのストアドプロシージャを呼び出すことがありますので、私はちょうどtbl1SentEmails
のためにPKのための生の値を渡しています。しかし、とにかく私はテーブルのstrEmailSendID
を渡すことができますし、それをtbl1Recipients
に入力することはできますか?
これはテーブルタイプのために作成されています
-- Create a table data type
CREATE TYPE [dbo].[SampleDataType] As Table
(
--This type has structure similar to the DB table
--SampleString Nvarchar(64) Not Null -- Having one String
--, SampleDate Date -- and one Date
strEmailSendID nvarchar(255) not null,
dtmSent datetime not null,
strSubject nvarchar(255) null,
strBody nvarchar(255) null,
strConversationID nvarchar(255) null,
strConversationTopic nvarchar(1000) null,
strConversationIndex nvarchar(max) null,
dtmReplied datetime null,
dtmOpened datetime null,
dtmClicked datetime null,
blnTrackOpens bit null,
blnTrackClicks bit null,
blnTrackReplies bit null,
lngMergeID bigint not null,
blnHide bit null,
lngLatestEventID bigint null,
strClickRespone nvarchar(50) null,
dtmClickResponse datetime null
)
CREATE TYPE [dbo].[SampleRecType] As Table
(
strEmailSendID nvarchar(255) not null,
strEmailAddress nvarchar(255) not null,
strDisplayName nvarchar(255) null,
strRecipientType nvarchar(5) not null
)
コードの実際のストアドプロシージャのために:
--This is the Stored Procedure
CREATE PROCEDURE [dbo].[SampleProcedure]
(
-- which accepts one table value parameter.
-- It should be noted that the parameter is readonly
@Sample As [dbo].[SampleDataType] Readonly, @Rec As [dbo].[SampleRecType] ReadOnly
)
AS
Begin
-- We simply insert values into the DB table from the parameter
-- The table value parameter can be used like a table with only read rights
--Insert Into SampleTable(SampleString,SampleDate)
--Select SampleString,SampleDate From @Sample
Insert Into tbl1Recipients(strEmailSendID, strEmailAddress, strDisplayName, strRecipientType)
Select * From @Rec
Insert Into tbl1SentEmails(strEmailSendID, dtmSent, strSubject, strBody, strConversationID, strConversationTopic, strConversationIndex, dtmReplied, dtmOpened, dtmClicked, blnTrackOpens, blnTrackClicks, blnTrackReplies, lngMergeID, blnHide, lngLatestEventID, strClickResponse, dtmClickResponse)
Select * From @Sample
End
コード表について:
USE [standss_tracking_us_sandbox]
GO
/****** Object: Table [dbo].[tbl1Recipients] Script Date: 10/11/2016 5:24:52 p.m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tbl1Recipients](
[strEmailSendID] [nvarchar](255) NOT NULL,
[lngRecipientNo] [bigint] IDENTITY(1,1) NOT NULL,
[strEmailAddress] [nvarchar](255) NOT NULL,
[strDisplayName] [nvarchar](255) NULL,
[strRecipientType] [nvarchar](5) NOT NULL,
[ts] [timestamp] NOT NULL,
CONSTRAINT [PK_tbl1Recipients] PRIMARY KEY CLUSTERED
(
[strEmailSendID] ASC,
[lngRecipientNo] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)
GO
ALTER TABLE [dbo].[tbl1Recipients] WITH CHECK ADD CONSTRAINT [FK_tbl1Recipients_tbl1SentEmails] FOREIGN KEY([strEmailSendID])
REFERENCES [dbo].[tbl1SentEmails] ([strEmailSendID])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[tbl1Recipients] CHECK CONSTRAINT [FK_tbl1Recipients_tbl1SentEmails]
GO
/****** Object: Table [dbo].[tbl1SentEmails] Script Date: 10/11/2016 5:28:42 p.m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tbl1SentEmails](
[strEmailSendID] [nvarchar](255) NOT NULL,
[dtmSent] [datetime] NOT NULL,
[strSubject] [nvarchar](255) NULL,
[strBody] [nvarchar](255) NULL,
[strConversationID] [nvarchar](255) NULL,
[strConversationTopic] [nvarchar](1000) NULL,
[strConversationIndex] [nvarchar](max) NULL,
[dtmReplied] [datetime] NULL,
[dtmOpened] [datetime] NULL,
[dtmClicked] [datetime] NULL,
[blnTrackOpens] [bit] NULL,
[blnTrackClicks] [bit] NULL,
[blnTrackReplies] [bit] NULL,
[ts] [timestamp] NOT NULL,
[lngMergeID] [bigint] NOT NULL,
[blnHide] [bit] NULL,
[lngLatestEventID] [bigint] NULL,
[strClickResponse] [nvarchar](50) NULL,
[dtmClickResponse] [datetime] NULL,
CONSTRAINT [PK_tbl1SentEmails] PRIMARY KEY CLUSTERED
(
[strEmailSendID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)
GO
ALTER TABLE [dbo].[tbl1SentEmails] WITH CHECK ADD CONSTRAINT [FK_tbl1SentEmails_tbl1Merges] FOREIGN KEY([lngMergeID])
REFERENCES [dbo].[tbl1Merges] ([lngMergeID])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[tbl1SentEmails] CHECK CONSTRAINT [FK_tbl1SentEmails_tbl1Merges]
GO
私たちは、テーブルを表示しますか?どこにエラーが出るのかはわかりません。 –
@JuanCarlosOropeza、私は 'tbl1Recipients'に挿入したいときに2番目の' INSERT'文でエラーを受け取ります。 'tbl1SentEmails'のPKである' strEmailSendID'というフィールドがあり、 'tbl1Recipients'にFKとして機能します。 –
あなたが提供するステートメントは' tbl1Recipients'や 'tbl1SentEmails'ではなくテーブル変数に挿入するだけです – mendosi