Sql server 创建存储过程以从其他(多个)表列填充表
我需要创建一个存储过程事务,它将从两个表中提取数据,并创建一个随机整数来填充第三个表(Sql server 创建存储过程以从其他(多个)表列填充表,sql-server,tsql,stored-procedures,transactions,Sql Server,Tsql,Stored Procedures,Transactions,我需要创建一个存储过程事务,它将从两个表中提取数据,并创建一个随机整数来填充第三个表(dbo.patient\u address) 我想要以下内容,但我很难理解如何将其作为存储过程编写脚本 dbo.address AddressID=dbo.patient\u address AddressID, dbo.patient PatientID=dbo.patient\u地址PatientID, RAND是1-3之间的整数(请参见dbo.addresstype)=dbo.patient\u addr
dbo.patient\u address
)
我想要以下内容,但我很难理解如何将其作为存储过程编写脚本
dbo.address AddressID=dbo.patient\u address AddressID,
dbo.patient PatientID=dbo.patient\u地址PatientID,
RAND是1-3之间的整数(请参见dbo.addresstype)=dbo.patient\u address AddressTypeID
下面是所有这些表的create语句
地址表-30000行到位(完整数据集)
患者表-30000行到位(完整数据集)
地址类型-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]
试试这个:
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
请花点时间理解存储过程和事务之间的区别。它们是两种不同的东西。存储过程可以在事务中执行,也可以在存储过程中存在事务。请不要在你的问题文本(非代码/sql)中使用所有的大写字母,它给读者的印象是大喊大叫。sql只是结构化查询语言——许多数据库系统都使用这种语言,但不是数据库产品。。。许多事情都是特定于供应商的-因此我们确实需要知道您使用的是什么数据库系统(以及哪个版本)(请相应地更新标记)…乍一看,这看起来像一个简单的
插入…选择…
查询;到目前为止你试过什么?您可能想提供更多关于您想要的“随机”地址类型的信息。您正在生成测试数据吗?您是否只希望AddressTypeID的值为1到3之间的随机值?你看到了吗?
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]
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