我有以下查询在手动执行时完美无缺。这会将表TRABAJADORES中的一些工作人员信息传递给PERSONAL。
INSERT INTO REPORTESDIARIOS.DBO.PERSONAL (DNI, Nombres, Apellidos, Contraseña, IdGrupo, Activo, Confianza)
SELECT
CODTRAB, UPPER(NOMBRE), (UPPER(APEPAT) + ' ' + UPPER(APEMAT)),
ENCRYPTBYPASSPHRASE('password', '1234'), 12, 1, 0
FROM
PIL.DBO.TRABAJADORES
LEFT OUTER JOIN
ReportesDiarios.DBO.PERSONAL ON CODTRAB = DNI
WHERE
DNI IS NULL
但是当我在触发器中使用它时
ALTER TRIGGER COPYNONLISTED
ON TRABAJADORES
AFTER INSERT, UPDATE
AS
BEGIN
INSERT INTO REPORTESDIARIOS.DBO.PERSONAL (DNI, Nombres, Apellidos, Contraseña, IdGrupo, Activo, Confianza)
SELECT
CODTRAB, UPPER(NOMBRE), (UPPER(APEPAT) + ' ' + UPPER(APEMAT)),
ENCRYPTBYPASSPHRASE('password', '1234'), 12, 1, 0
FROM
PIL.DBO.TRABAJADORES
LEFT OUTER JOIN
ReportesDiarios.DBO.PERSONAL ON CODTRAB = DNI
WHERE
DNI IS NULL
END
GO
它只是插入id(这是DNI)而其他字段是空白的。
离。 修改:(This is what i get on SQL
表1(表2中没有的行)
1, Samuel, Jackson, PASS, 1, 0
使用查询手动复制相同的内容
1, Samuel, Jackson, PASS, 1, 0
然而,如果我在触发器中使用它,它只是复制ID,但其他所有涉及查询的TRABAJADORES它不起作用它只返回空白(“”)数据
1, , , PASS, 1,0
是否有我遗漏的东西,因为我在使用inserted表时遇到了类似的问题(我放弃了这种方法)所以我不确定表中是否有限制或SQL。
答案 0 :(得分:1)
好吧,我想我终于明白你要做什么了。您需要在触发器中使用插入和删除的虚拟表,但显然您遇到了一些问题。您的代码很接近,但它使用TRABAJADORES作为基表而不是插入。注意我还在查询中添加了别名,并引用了以别名开头的每一列。这使得确定某列所属的表更容易。
create TRIGGER COPYNONLISTED
ON TRABAJADORES
AFTER INSERT, UPDATE
AS
BEGIN
INSERT INTO PERSONAL
(
DNI
, Nombres
, Apellidos
, Contraseña
, IdGrupo
, Activo
, Confianza
)
SELECT
i.CODTRAB
, UPPER(i.NOMBRE)
, (UPPER(i.APEPAT) + ' ' + UPPER(i.APEMAT))
, ENCRYPTBYPASSPHRASE('password', '1234')
, 12
, 1
, 0
FROM inserted i
LEFT OUTER JOIN PERSONAL p ON i.CODTRAB = p.DNI
WHERE p.DNI IS NULL
END
GO