J'ai créé une base de données qui comporte plusieurs tables.
les tables qui sont pertinentes pour mon problème :
Tableau des profils http://imageshack.us/photo/my-images/838/profileqw.jpg/ Stocke tous les porfiles
Table SalaryGroup http://imageshack.us/photo/my-images/255/salarygroup.jpg/ Stocke tous les salaires
ProfileSalaryGroups http://imageshack.us/photo/my-images/138/profileandsalary.jpg/ Stocke les profils et les salaires qui sont connectés
J'ai plusieurs procédures stockées qui insèrent des profils/salaires, etc. J'ai une procédure qui relie les profils et les salaires et les stocke dans la table "profileSalaryGroups". J'ai également une procédure qui récupère tous les salaires qui sont liés à un profil spécifique.
Ces procédures effectuent les opérations suivantes :
Connecte les profils et la procédure des salaires (fonctionne parfaitement) :
ALTER PROCEDURE [dbo].[ConnectProfileAndSalary]
-- Add the parameters for the stored procedure here
@ProfileName varchar(50) = '',
@Salaryname varchar(50) = ''
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
DECLARE @pId int
DECLARE @sId int
SELECT @pId = Id from [Profile] where Name = @ProfileName
SELECT @sId = Id from SalaryGroup where Name = @Salaryname
-- If the Id number already exists
IF ((SELECT COUNT(*) FROM ProfileSalaryGroups WHERE SalaryGroupId = @sId) > 0 OR
(SELECT COUNT(*) FROM ProfileSalaryGroups WHERE ProfileId = @pId) > 0)
RAISERROR ('Connection Exists', -- Message text.
16, -- Severity.
1 )
ELSE
INSERT INTO ProfileSalaryGroups (SalaryGroupId,ProfileId ) VALUES (@sId, @pId)
END
Récupère tous les salaires qui sont liés à un profil spécifique (fonctionne parfaitement) :
ALTER PROCEDURE [dbo].[GetConnectedSalaries]
-- Add the parameters for the stored procedure here
@ProfId int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT SalaryGroupId, s.Name from ProfileSalaryGroups ps
INNER JOIN SalaryGroup as s on s.Id = ps.SalaryGroupId
Where ps.ProfileId = @ProfId
END
Problème :
J'essaie de créer une procédure qui me donne tous les noms et les numéros d'identification des salariés qui ne sont PAS dans la base de données. connectés à un profil.
J'ai essayé plusieurs approches à ce sujet, par exemple :
SELECT SalaryGroupId, s.Name from ProfileSalaryGroups ps
INNER JOIN SalaryGroup as s on s.Id = ps.SalaryGroupId
Where ps.ProfileId != @ProfId
ça m'apporte la moitié des choses que je veux. Je veux obtenir TOUS les salaires qui ne sont pas connectés à ce profil mais ce code me renvoie tous les Id et noms de salaires qui ont une connexion avec un profil mais pas avec celui que j'ai envoyé comme paramètre, il n'inclut pas tous les salaires qui existent dans la table "SalaryGroup".
SELECT s.Id, s.Name from SalaryGroup s
where NOT EXISTS (SELECT SalaryGroupId, s.Name, s.Id from ProfileSalaryGroups ps
INNER JOIN SalaryGroup as s on s.Id = ps.SalaryGroupId
Where ps.ProfileId = 17
)
Cela n'a rien donné.
J'y travaille depuis un certain temps et j'ai tenté plusieurs autres approches (parfois risibles) et je suis coincé. Si vous avez besoin de plus d'informations, demandez-les et je ferai de mon mieux pour vous les fournir.
Si le titre n'est pas correct, je suis désolé mais je ne savais pas quoi faire du titre de ce problème. Si @Admin a un meilleur titre en tête, n'hésitez pas à le modifier.
Merci !