我在插入时创建一个触发器,该触发器将使用新插入行的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)
- 不能假设
Inserted
只有一行,必须将其视为具有0-N行的表,并对其执行基于集合的操作(而不是过程操作( FORMAT
会将您现有的id格式化为您需要的新格式
INSERT INTO [dbo].[tblUsersPseudo] (id, col1, col2, ...)
SELECT FORMAT(id,'PSU0000')
, col1, col2
FROM Inserted;