首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求大侠解决一个有关问题,分不多了

2012-08-28 
求大侠解决一个问题,分不多了当用户表被插入一条新用户的记录时,利用触发器建立一个新的用户表,表名是这个

求大侠解决一个问题,分不多了
当用户表被插入一条新用户的记录时,利用触发器建立一个新的用户表,表名是这个用户的用户id,该如何实现呢??
我是菜鸟,有没有大侠能够不为分数来帮帮忙的!!!

[解决办法]
在插入后,先获取ID,然后用动态SQL拼接create table @id 。再EXEC 这个动态语句就可以了。不过你这个需求有点不合理哦。这种创建对数据库管理来说是一种灾难后果。已经不可控了。如果是学习倒没所谓,如果是工作的话你就要多多思考了。
[解决办法]

SQL code
if object_id('cus') is not null drop table cusgocreate table cus(uname nvarchar(20) not null primary key)gocreate trigger cus_inson cusfor insertasbegin    if not exists(select 1 from inserted) return;    declare @sql nvarchar(max)    select @sql=isnull(@sql,'')+'if object_id('''+uname+''') is null create table '+uname+'(id int)' from inserted    exec(@sql)endgoinsert into cus select 'aaaa'union all select 'bbbb';select * from aaaaselect * from bbbb
[解决办法]
当插入用户很多的时候,表会变得非常多。

SQL code
USE testGO--准备环境IF OBJECT_ID('t1') IS NOT NULL    DROP TABLE t1CREATE TABLE t1        (        id tinyint identity        ,value varchar(10)    )GO--建立触发器CREATE TRIGGER tgCreateUserTable    ON t1    FOR INSERTAS     DECLARE @UserTableName varchar(20);    DECLARE @s varchar(100);    --数字不是有效的表名,所以加上'UserTable'前缀    SELECT @UserTableName = 'UserTable'+CAST ( id AS varchar)    FROM inserted;    --构造创建表的语句    SET @s = '    CREATE TABLE ' + @UserTableName +'    (        id tinyint identity    )'    EXEC(@s)GO--插入数据到表t1,测试触发器INSERT INTO t1VALUES    ('x')--验证触发器正常运行SELECT nameFROM sys.tablesWHERE name LIKE 'UserTable'+'%'
[解决办法]
探讨

当插入用户很多的时候,表会变得非常多。

SQL code

USE test
GO
--准备环境
IF OBJECT_ID('t1') IS NOT NULL
DROP TABLE t1

CREATE TABLE t1
(
id tinyint identity
,value varchar(10)
)
GO
--建立触发……

热点排行