1

2 つのテーブルからデータを取得し、ランダムな整数を作成して 3 つ目のテーブルにデータを入力するストアド プロシージャ トランザクションを作成する必要があります ( dbo.patient_address)。

以下が必要ですが、これをストアド プロシージャとしてスクリプト化する方法を理解するのに苦労しています。

dbo.address AddressID = dbo.patient_address AddressID、dbo.patient PatientID = dbo.patient_address PatientID、RAND は 1 ~ 3 の整数です (dbo.addresstype を参照) = dbo.patient_address AddressTypeID

以下は、これらすべてのテーブルの create ステートメントです。

ADDRESS TABLE - 30000 行 (完全なデータ セット)

CREATE TABLE [dbo].[ADDRESS](
    [AddressID] [int] NOT NULL,
    [StreetAddress] [varchar](50) NULL,
    [City] [varchar](50) NULL,
    [State] [varchar](50) NULL,
    [PostalCode] [varchar](50) NULL,
 CONSTRAINT [ADDRESS_PK] PRIMARY KEY CLUSTERED 
(
    [AddressID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

PATIENT TABLE - 30000 行 (完全なデータセット)

CREATE TABLE [dbo].[PATIENT](
    [PatientID] [int] NOT NULL,
    [PatientFName] [varchar](50) NOT NULL,
    [PatientLName] [varchar](50) NOT NULL,
    [GenderID] [int] NOT NULL,
    [DateOfBirth] [date] NOT NULL,
 CONSTRAINT [PATIENT_PK] PRIMARY KEY CLUSTERED 
(
    [PatientID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ADDRESS TYPE - 3 つの選択肢 (自宅、請求先、職場) - 1 から 3 までの整数

CREATE TABLE [dbo].[ADDRESS_TYPE](
    [AddressTypeID] [int] NOT NULL,
    [AddressTypeName] [varchar](10) NOT NULL,
    [AddressTypeDescr] [varchar](10) NULL,
 CONSTRAINT [ADDRESS_TYPE_PK] PRIMARY KEY CLUSTERED 
(
    [AddressTypeID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

INSERT INTO [dbo].[ADDRESS_TYPE]
([AddressTypeID],[AddressTypeName],[AddressTypeDescr])
Values ('1','Home','Home'), ('2','Bill','Billing'), ('3','Work','Work')

これは、ストアド プロシージャ トランザクションを使用して、上記のすべてのテーブルから入力する最終的なテーブルです。

CREATE TABLE [dbo].[PATIENT_ADDRESS](
    [PatientID] [int] NOT NULL,
    [AddressID] [int] NOT NULL,
    [AddressTypeID] [int] NULL,
 CONSTRAINT [PATIENT_ADDRESS_PK] PRIMARY KEY CLUSTERED 
(
    [PatientID] ASC,
    [AddressID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
4

1 に答える 1

0

これを試して:

INSERT INTO PATIENT_ADDRESS
SELECT PatientID, AddressID, 
    CONVERT(INT,(ABS(CHECKSUM(NEWID())/2148000000.))*3)+1 AS AddressTypeID
FROM (
    SELECT PatientID, ROW_NUMBER() OVER (ORDER BY PatientID) AS RowNum 
    FROM dbo.PATIENT
) x
INNER JOIN (
    SELECT AddressID, ROW_NUMBER() OVER (ORDER BY AddressID) AS RowNum 
    FROM dbo.ADDRESS
) y ON x.RowNum = y.RowNum
于 2013-06-03T11:35:59.690 に答える