【发布时间】:2013-10-08 17:33:59
【问题描述】:
我在使用存储过程将数据插入表时遇到问题。我必须使用这个程序,它们是由其他程序员编写的。
通过这个程序,我可以将订单插入数据库。我为程序提供了几个属性,一切都很好。在订单表中有一个带有客户 ID 的列。
当我在订单表中插入新行时,送货地址会被客户表中的数据覆盖。该程序不会做出这样的事情。如果我将手动插入到订单表中,我的送货地址将被接受。
是否有可能存在隐藏程序在插入新订单时自动获取客户信息?
USE [EHS]
GO
/****** Object: StoredProcedure [dbo].[SP_INTERNETAUFTRAGE] Script Date: 10/07/2013 12:21:42 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SP_INTERNETAUFTRAGE]
@Akcija int = 1,
/*
Many more attributes
*/
@p6 money = NULL,
@rezultat int = 0 OUTPUT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @brojac int
SET @brojac = 0
DECLARE @TypName nvarchar(30)
DECLARE @firmC int
DECLARE @gespert bit
DECLARE @letzeAufNr int
DECLARE @letzeRechNr int
SET @gespert=0
SELECT @TypName = [Name], @letzeAufNr = letzteAufNr, @gespert = gesperrt FROM dbo.T_letzteAufNr WHERE Typ=@Typ AND Jahr=Year(GETDATE())
SET @firmC=(@Typ-1)/10
IF (@firmC=3)
BEGIN
SET @firmC=4
END
IF (@Akcija=1)
BEGIN
IF (@gespert=0)
BEGIN
DECLARE @AufNrNew nvarchar(10)
DECLARE @AufNrN int
SET @AufNrNew =CAST(@Typ AS nvarchar(2)) + Right(CAST(Year(GETDATE()) AS nvarchar(4)), 2) + Right('0000' + CAST((@letzeAufNr + 1) as nvarchar(10)), 5)
SET @AufNrN = CAST(@AufNrNew AS int)
PRINT @RechOrt
INSERT INTO dbo.T_Internetaufträge (rows) VALUES
(values)
INSERT INTO dbo.T_Internetaufträge_Historie (rows) VALUES
(values)
UPDATE dbo.T_letzteAufNr SET letzteAufNr=(@letzeAufNr+1) WHERE Typ=@Typ AND Jahr=Year(GETDATE())
-- UPDATE dbo.T_letzteAufNr SET gesperrt=0 WHERE Typ=@Typ AND Jahr=Year(GETDATE())
UPDATE T_Kunden SET FirmaCust=FirmaCust |@firmC WHERE KuNr=@KuNr
SET @rezultat=@AufNrN
return @rezultat
END ELSE BEGIN
SET @rezultat=-3 /*GESPERT*/
return -3
END
END ELSE BEGIN
PRINT 'UPDATE'
UPDATE dbo.T_Internetaufträge SET rows=values /* many more */ WHERE AufNr = @AufNr
INSERT INTO dbo.T_Internetaufträge_Historie (rows) VALUES
(values)
END
SET @rezultat = 0
return 0
END
【问题讨论】:
-
orders 表上有任何插入触发器吗?
-
可能是写入数据库的触发器。这些是可以指示在插入/更新/删除等数据库事件上自动运行的过程
-
Microsof SQL Management Studio 显示此数据库中没有触发器。
-
可以把存储过程的代码贴在这里吗?
-
我根本没有查看存储过程代码,但您的短语“Management Studio 在此数据库中显示没有触发器”。让我觉得你可能找错地方了。触发器将在展开表格时出现。数据库触发器是不同的东西。
标签: tsql stored-procedures insert