通过触发器从inserted.id创建字符串



我在插入时创建一个触发器,该触发器将使用新插入行的id在另一个表中创建一条新记录。

在将id插入另一个表之前,我需要格式化它。到目前为止,这是我的代码。。。。在创建格式化的@PseudoID时出现问题。

CREATE TRIGGER OnInsertCreateUnallocatedPseudo 
ON  tblTeams 
AFTER INSERT
AS 
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
DECLARE @PseudoID NVARCHAR(50), @tmID NVARCHAR(10)
SELECT @tmID = CONVERT(nvarchar(10),inserted.tmID) FROM inserted
--NEED SOME CODE TO CREATE A PADDED OUT PseudoID e.g.
-- if @tmID =  '7' then @PseudoID = 'PSU0007'
-- if @tnID = '25' then @PseudoID = 'PSU0025'

INSERT INTO [dbo].[tblUsersPseudo].....
END

您不能将它分配给触发器中的一个变量,因为可能有多行,但您可以执行这样的操作来插入到另一个表中。

LEFT('PSU0000',LEN('PSU0000')-LEN(CONVERT(nvarchar(10),inserted.tmID))) + CONVERT(nvarchar(10),inserted.tmID)
  1. 不能假设Inserted只有一行,必须将其视为具有0-N行的表,并对其执行基于集合的操作(而不是过程操作(
  2. FORMAT会将您现有的id格式化为您需要的新格式
INSERT INTO [dbo].[tblUsersPseudo] (id, col1, col2, ...)
SELECT FORMAT(id,'PSU0000')
, col1, col2
FROM Inserted;

最新更新