--表MyLS中的insert存储过程
IF OBJECT_ID('P_INSERT2')IS NOT NULL
DROP PROC P_INSERT2
GO
CREATE PROC P_INSERT2
@NAME VARCHAR(10),
@AGE INT,
@SEX CHAR(2),
@TELEPHONE VARCHAR(20),
@MAIL VARCHAR(30),
@CAPTION VARCHAR(1000)
AS
INSERT INTO dbo.MyLS(MyName,MyAge,MySex,MyTelephone,MyMail,MyCaption)VALUES(@NAME,@AGE,@SEX,@TELEPHONE,@MAIL,@CAPTION)
GO
麻烦各位大虾写下调用这个存储过程的触发器
IF OBJECT_ID('P_INSERT2')IS NOT NULL
DROP PROC P_INSERT2
GO
CREATE PROC P_INSERT2
@NAME VARCHAR(10),
@AGE INT,
@SEX CHAR(2),
@TELEPHONE VARCHAR(20),
@MAIL VARCHAR(30),
@CAPTION VARCHAR(1000)
AS
INSERT INTO dbo.MyLS(MyName,MyAge,MySex,MyTelephone,MyMail,MyCaption)VALUES(@NAME,@AGE,@SEX,@TELEPHONE,@MAIL,@CAPTION)
GO
麻烦各位大虾写下调用这个存储过程的触发器
AS
INSERT dbo.MyLS(列名....) SELECT 列名 FROM INSERTED
for insert
as
declare @NAME VARCHAR(10),
@AGE INT,
@SEX CHAR(2),
@TELEPHONE VARCHAR(20),
@MAIL VARCHAR(30),
@CAPTION VARCHAR(1000)
select @NAME=name,@Age=age,@sex=sex,@TELEPHONE =TELEPHONE ,@MAIL=MAIL , @CAPTION=CAPTION from inserted
exec P_INSERT2 @NAME ,@AGE,@SEX,@TELEPHONE,@MAIL,@CAPTIONGO
--此触发器有极限性,就是批量插入时只能执行插入第一条记录中。--楼主的实现方式应该需要修改。
DROP TRIGGER S_TRIGGER
GO
CREATE TRIGGER S_TRIGGER on tb
FOR INSERT
AS
DECLARE
@NAME VARCHAR(10),
@AGE INT,
@SEX CHAR(2),
@TELEPHONE VARCHAR(20),
@MAIL VARCHAR(30),
@CAPTION VARCHAR(1000)
SELECT @NAME=MyNAME,@AGE=MyAge,@SEX=MySex,@TELEPHONE=MyTelephone,@MAIL=MyMail,@CAPTION=MyCaption from inserted
exec P_INSERT2 @NAME ,@AGE,@SEX,@TELEPHONE,@MAIL,@CAPTION
GO/**消息 207,级别 16,状态 1,过程 S_TRIGGER,第 11 行
列名 'MyNAME' 无效。
消息 207,级别 16,状态 1,过程 S_TRIGGER,第 11 行
列名 'MyAge' 无效。
消息 207,级别 16,状态 1,过程 S_TRIGGER,第 11 行
列名 'MySex' 无效。
消息 207,级别 16,状态 1,过程 S_TRIGGER,第 11 行
列名 'MyTelephone' 无效。
消息 207,级别 16,状态 1,过程 S_TRIGGER,第 11 行
列名 'MyMail' 无效。
消息 207,级别 16,状态 1,过程 S_TRIGGER,第 11 行
列名 'MyCaption' 无效。**/怎么会报这样的错啊
TRI_IN_事件表 and 事件表 这个可以说明白点吗? 我不是很懂!
IF OBJECT_ID('P_INSERT2')IS NOT NULL
DROP PROC P_INSERT2
GO
CREATE PROC P_INSERT2
@NAME VARCHAR(14),
@AGE INT,
@SEX VARCHAR(4),
@TELEPHONE VARCHAR(20),
@MAIL VARCHAR(30),
@CAPTION VARCHAR(1000)
AS
SET @NAME=''''+@NAME+''''
SET @SEX=''''+@SEX+''''
SET @TELEPHONE=''''+@TELEPHONE+''''
SET @MAIL=''''+@MAIL+''''
SET @CAPTION=''''+@CAPTION+''''
INSERT INTO dbo.MyLS(MyName,MyAge,MySex,MyTelephone,MyMail,MyCaption)VALUES(@NAME,@AGE,@SEX,@TELEPHONE,@MAIL,@CAPTION)
GO
--表MyLS中的insert存储过程
IF OBJECT_ID('P_INSERT3')IS NOT NULL
DROP PROC P_INSERT3
GO
CREATE PROC P_INSERT3
@NAME VARCHAR(14),
@AGE INT,
@SEX VARCHAR(4),
@TELEPHONE VARCHAR(20),
@MAIL VARCHAR(30),
@CAPTION VARCHAR(1000)
AS
SET @NAME=''''+@NAME+''''
SET @SEX=''''+@SEX+''''
SET @TELEPHONE=''''+@TELEPHONE+''''
SET @MAIL=''''+@MAIL+''''
SET @CAPTION=''''+@CAPTION+''''
INSERT INTO dbo.MyLS(MyName,MyAge,MySex,MyTelephone,MyMail,MyCaption)VALUES(@NAME,@AGE,@SEX,@TELEPHONE,@MAIL,@CAPTION)
GOIF OBJECT_ID('mr_tr')IS NOT NULL
DROP TRIGGER mr_tr
GO
create trigger mr_tr on tb
for insert
as
declare
@NAME VARCHAR(10),
@AGE INT,
@SEX CHAR(2),
@TELEPHONE VARCHAR(20),
@MAIL VARCHAR(30),
@CAPTION VARCHAR(1000)
select @NAME=MyName,@Age=MyAge,@sex=MySex,@TELEPHONE=MyTelephone ,@MAIL=MyMail , @CAPTION=MyCaption from inserted
exec P_INSERT3 @NAME ,@AGE,@SEX,@TELEPHONE,@MAIL,@CAPTION
GO
消息 207,级别 16,状态 1,过程 mr_tr,第 11 行
列名 'MyName' 无效。
消息 207,级别 16,状态 1,过程 mr_tr,第 11 行
列名 'MyAge' 无效。
消息 207,级别 16,状态 1,过程 mr_tr,第 11 行
列名 'MySex' 无效。
消息 207,级别 16,状态 1,过程 mr_tr,第 11 行
列名 'MyTelephone' 无效。
消息 207,级别 16,状态 1,过程 mr_tr,第 11 行
列名 'MyMail' 无效。
消息 207,级别 16,状态 1,过程 mr_tr,第 11 行
列名 'MyCaption' 无效。
我现在完全按你们的方法用了啊 怎么还报这样的错误 这是什么原因啊
按照你这个写法还是出错,我把
select @NAME=name,@Age=age,@sex=sex,@TELEPHONE =TELEPHONE ,@MAIL=MAIL , @CAPTION=CAPTION from inserted
exec P_INSERT2 @NAME ,@AGE,@SEX,@TELEPHONE,@MAIL,@CAPTION
--改成了
select @NAME=m.MyName,@Age=m.MyAge,@sex=m.MySex,@TELEPHONE=m.MyTelephone ,@MAIL=m.MyMail ,
@CAPTION=m.MyCaption from Inserted,MyLS m
exec P_INSERT2 @NAME ,@AGE,@SEX,@TELEPHONE,@MAIL,@CAPTION然后再将INSERT INTO dbo.MyLS(MyName,MyAge,MySex,MyTelephone,MyMail,MyCaption)VALUES(@NAME,@AGE,@SEX,@TELEPHONE,@MAIL,@CAPTION)
GO
--修改为:
select @NAME,@AGE,@SEX,@TELEPHONE,@MAIL,@CAPTION;
--然后运行,结果报字符串越界错误!
--原因
SET @NAME=''''+@NAME+''''
SET @SEX=''''+@SEX+''''
SET @TELEPHONE=''''+@TELEPHONE+''''
SET @MAIL=''''+@MAIL+''''
SET @CAPTION=''''+@CAPTION+''''
--因为在数据库中SEX是char(2)长度,你这里用上'''',在代码中没错,但是在插入数据库时候就会出问题了!
--最后修改一点
@NAME NVARCHAR(20),
@AGE INT,
@SEX VARCHAR(2),
@TELEPHONE NVARCHAR(30),
@MAIL NVARCHAR(30),
@CAPTION NVARCHAR(1000)OK 搞掂!