我想要一个在将数据添加到表时创建表的触发器。表名必须是插入的条目的名称。
示例:当患者在医院注册时,行被插入paitientDetail
表。触发器必须创建具有患者姓名的表。
答案 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