我想要一个在将数据添加到表时创建表的触发器。表名必须是插入的条目的名称。
paitientDetail
示例:当患者在医院登记时,表格中会插入一行。触发器必须创建包含患者姓名的表。
我想要一个在将数据添加到表时创建表的触发器。表名必须是插入的条目的名称。
paitientDetail
示例:当患者在医院登记时,表格中会插入一行。触发器必须创建包含患者姓名的表。
在我回答这个问题之前,我必须先说这是一个糟糕的主意。 请不要为每个患者创建一个新表。 这会给你带来很多问题。
例如,如果您有 100 个患者,那么您将有 100 个表。那么,如果您需要为每个患者返回数据,您会怎么做……您将一团糟。
在 SQL Server 中,如果您想要执行此类过程,您可以通过以下方式执行此操作:
样品表:
CREATE TABLE [dbo].[Test](
[id] [int] NOT NULL,
[name] [varchar](50) NOT NULL
) ON [PRIMARY]
Your Trigger
将使用动态 SQL 从插入的数据中检索名称。:
CREATE TRIGGER dbo.testTrg
ON dbo.test
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
declare @newtable varchar(50)
set @newtable = (select quotename(name) from inserted)
declare @sql varchar(max)
set @sql = 'create table ' + @newtable + '
(
[id] [int] NOT NULL,
[newColumn1] [varchar](50) NOT NULL
) ON [PRIMARY]'
exec(@sql)
END
此触发器将创建表:
CREATE TABLE [dbo].[test1](
[id] [int] NOT NULL,
[newColumn1] [varchar](50) NOT NULL
) ON [PRIMARY]
以下是对患者更好的设计。拥有一张患者表格,然后您将根据需要拥有其他表格,以包括患者的任何其他详细信息:
Patient Table:
id int, -- PK
name varchar(50)
Doctor Table
id int, -- PK
name varchar(50)
Patient_Doctor table
p_id int, -- PK -- FK to Patient Table
d_id int -- PK -- FK to Doctor Table