-5

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

paitientDetail 示例:当患者在医院登记时,表格中会插入一行。触发器必须创建包含患者姓名的表。

4

1 回答 1

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
于 2012-08-06T17:21:55.840 回答