需要一些帮助...
我有一个列,数据显示为 -
USEREMAIL:-USERNAME
e.g.
John.smith@test.com:-JSmit
janet.smit@test.co.uk:-JanSmit
peter.parker@test.ca:-PPark
我需要一个触发器,当添加新条目时,它会自动删除除用户名之外的所有内容。
所以上面的例子就会变成
JSmit
JanSmit
PPark
任何建议都将不胜感激。
答案 0 :(得分:1)
以下是创建所描述的触发器的语法:
测试表:
CREATE TABLE xx(UserName varchar(100))
您必须展开触发器以包含所有列。
触发语法:
CREATE TRIGGER xx_trggr
ON xx
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO xx (UserName)
SELECT stuff(UserName, 1, charindex(':-', UserName) + 1, '')
FROM inserted
END
GO
插入数据:
INSERT xx(UserName)
values
('John.smith@test.com:-JSmit'),
('janet.smit@test.co.uk:-JanSmit'),
('peter.parker@test.ca:-PPark')
测试输入:
SELECT UserName FROM xx
结果:
UserName
JSmit
JanSmit
PPark
您可以改为使用AFTER触发器,但这需要一个唯一的键
改为使用此表:
CREATE TABLE xx(id int identity(1,1), UserName varchar(100))
这个触发器:
CREATE TRIGGER xx_trggr
ON xx
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
UPDATE xx
SET [UserName] = stuff(xx.UserName, 1, charindex(':-', xx.UserName) + 1, '')
FROM inserted JOIN xx On inserted.id = xx.id
END
与其他触发器的结果相同。
答案 1 :(得分:0)
这将为您提供
列中的用户名SET columnName= select SUBSTRING( columnName, CHARINDEX('-',columnName)+1 , LEN(columnName))
在触发器
中使用它编辑1 :(如果您担心您的电子邮件可以包含-
)
SET columnName= select SUBSTRING( columnName, CHARINDEX(':-',columnName)+2 , LEN(columnName))
答案 2 :(得分:0)
您需要在桌面和触发器主体中创建一个AFTER INSERT
触发器,使用下面的内容来删除电子邮件部分
select right('John.smith@test.com:-JSmit',(LEN('John.smith@test.com:-JSmit') - CHARINDEX('-','John.smith@test.com:-JSmit')))