【发布时间】:2016-10-23 16:46:43
【问题描述】:
我有一个包含字段 customer_code 和 customer_Name 的表。 我想在插入客户名称时触发触发器以生成和更新客户代码。
CustomerCode 必须是客户姓名的第一个、第三个和最后一个字母,如果有多个客户具有相同的姓名, code 必须加上 1,2,3....etc(eg: RAHAN-RHN, RAHAN-RHN1, RHN2...etc)。
另外,如果有别的名字 *(eg: ROHAN-code must be RHN3) *我卡在这部分
谁能帮我编写一个触发器的脚本。
谢谢
这是我创建的,但是第二个尝试部分有错误,如上所述。
CREATE TRIGGER [dbo].[alphaNumericCustomerReference]
ON [dbo].[CUSTOMER_MASTER]
AFTER INSERT
AS
declare @NewCode nvarchar(50)
declare @NewName nvarchar(50)
declare @checkCode nvarchar(50)
declare @ExtendedRefCode nvarchar(50)
declare @id int,@msg varchar(200)
declare @sameCustomerCount int
select @id= CUST_ID from inserted i;
select @NewCode= UPPER(SUBSTRING(CUST_NAME, 1, 1)+SUBSTRING(CUST_NAME, 3, 1)+RIGHT(CUST_NAME,1)) from inserted i;
select @checkCode=CUST_CODE from dbo.CUSTOMER_MASTER where CUST_CODE=@NewCode
select @NewName=CUST_NAME from inserted i;
select @sameCustomerCount=count(CUST_NAME)-2 from dbo.CUSTOMER_MASTER where CUST_NAME=@NewName
BEGIN
SET NOCOUNT ON;
if @checkCode is null
BEGIN TRY
UPDATE CUSTOMER_MASTER
SET CUST_CODE= @NewCode
where CUST_ID=@id
END TRY
BEGIN CATCH
PRINT 'Error occured that is'
set @msg=(SELECT ERROR_MESSAGE())
print @msg;
END CATCH
else
BEGIN TRY
select @sameCustomerCount=@sameCustomerCount+1;
select @ExtendedRefCode=@NewCode+convert(nvarchar(255),@sameCustomerCount)
UPDATE CUSTOMER_MASTER
SET CUST_CODE= @ExtendedRefCode
where CUST_ID=@id
END TRY
BEGIN CATCH
PRINT 'Error occured that is'
set @msg=(SELECT ERROR_MESSAGE())
print @msg;
END CATCH
【问题讨论】:
-
在寻求帮助之前,您应该尝试自己编写触发器。
-
谢谢,我正在努力..
-
触发器是高度特定于供应商的 - 所以请添加一个标签来指定您使用的是
mysql、postgresql、sql-server、oracle还是db2- 或者完全是别的东西。 -
@marc_s 抱歉,它的 SQL SERVER 2008
标签: sql sql-server triggers