如何通过触发器创建表,该名称作为插入的数据之一

时间:2012-08-06 16:58:00

标签: mysql sql sql-server tsql sql-server-2008-r2

我想要一个在将数据添加到表时创建表的触发器。表名必须是插入的条目的名称。

示例:当患者在医院注册时,行被插入paitientDetail表。触发器必须创建具有患者姓名的表。

1 个答案:

答案 0 :(得分:3)

在我回答这个问题之前,我必须先说这是一个可怕的想法请不要为每位患者创建一个新表。这将为您带来许多问题。

例如,如果您有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