sql server存储过程的一个疑问

xjyl1985 2018-03-17 10:21:59
请各位大神帮忙一下:
现有一张表,表A(假设该表有若干字段,其中有一个为单据号的字段B)。
已创建一个存储过程,执行命令为 exec 存储过程 字段B。
每次在往表A中新增一行数据时,都需要执行一次这个存储过程,exec 存储过程 字段B(此时字段B为新增行的数据)。
问题来了,怎样能够在往表A插入数据的同时,能使这个存储过程自动执行: exec 存储过程 字段B(此时字段B为新增行的数据)?
如何做到?怎么做?有什么需要考虑的?如何避免重复执行?
...全文
320 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
在路上_- 2018-03-19
  • 打赏
  • 举报
回复
用AFTER触发器,把代码放触发器里面。 通过类似于 SELECT i.B FROM Inserted i 的方式引用为新增数据的字段B
CREATE TRIGGER dbo.trig_A_I
   ON  dbo.A
   AFTER INSERT
AS 
BEGIN
  ......
END
中国风 2018-03-17
  • 打赏
  • 举报
回复
存储过程里处理逻辑
二月十六 版主 2018-03-17
  • 打赏
  • 举报
回复
用触发器,在插入数据的时候,把B字段数据填充
吉普赛的歌 版主 2018-03-17
  • 打赏
  • 举报
回复
USE tempdb
GO
IF OBJECT_ID('A') IS NOT NULL DROP TABLE A
IF OBJECT_ID('Proc_Exec_A_B') IS NOT NULL DROP PROC Proc_Exec_A_B
GO
CREATE TABLE A(
	idA INT IDENTITY(1,1) PRIMARY KEY,
	B INT	
)
GO
-- =============================================
-- Author:		yenange
-- Create date: 2018-03-17
-- Description:	
-- =============================================
CREATE PROC Proc_Exec_A_B
@B INT
AS
BEGIN
	SET NOCOUNT ON
	PRINT '刚才插入记录的B字段的值为:'+str(@B)
END
GO
-- =============================================
-- Author:		yenange
-- Create date: 2018-03-17
-- Description:	A表触发器,插入时执行存储过程
-- =============================================
CREATE TRIGGER dbo.trig_A_I
   ON  dbo.A
   AFTER INSERT
AS 
BEGIN
	SET NOCOUNT ON;
	DECLARE @t TABLE (
		id INT IDENTITY(1,1),
		B INT
	)
	INSERT INTO @t(B)
	SELECT t.B
	FROM INSERTED AS t
	
	DECLARE @i INT,@imax INT,@B INT
	SELECT @i=1,@imax=MAX(id) FROM @t
	WHILE @i<=@imax
	BEGIN
		SELECT @B=B FROM @t WHERE id=@i
		EXEC dbo.Proc_Exec_A_B @B
		SET @i=@i+1
	END 
END
GO

---------------- 验证 -------------
SET NOCOUNT ON
INSERT INTO A(B)
SELECT 1
UNION ALL SELECT 2
UNION ALL SELECT 3

/*
刚才插入记录的B字段的值为:         3
刚才插入记录的B字段的值为:         2
刚才插入记录的B字段的值为:         1
*/

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧