WHERE ',' + Manager + ',' LIKE '%,Jim,%'
Oder ich nehme an, um mit Ihrem tatsächlichen Code übereinzustimmen:
WHERE ',' + Manager + ',' LIKE '%,' + @Manager + ',%'
Beachten Sie, dass Ihr Design extrem fehlerhaft ist. Es gibt keinen Grund, warum Sie überhaupt Namen in dieser Tabelle speichern sollten, ganz zu schweigen von einer durch Kommas getrennten Liste von Datenpunkten. Diese Fakten sind an sich schon wichtig, also behandeln Sie sie auch so!
CREATE TABLE dbo.Managers
(
ManagerID INT PRIMARY KEY,
Name NVARCHAR(64) NOT NULL UNIQUE, ...
);
CREATE TABLE dbo.Projects
(
ProjectID INT PRIMARY KEY,
Name NVARCHAR(64) NOT NULL UNIQUE, ...
);
CREATE TABLE dbo.ProjectManagers
(
ProjectID INT NOT NULL FOREIGN KEY REFERENCES dbo.Projects(ProjectID),
ManagerID INT NOT NULL FOREIGN KEY REFERENCES dbo.Managers(ManagerID)
);
Richten Sie nun die von Ihnen erwähnten Beispieldaten ein:
INSERT dbo.Managers(ManagerID, Name)
VALUES(1,N'John'),(2,N'Jim'),(3,N'Julie');
INSERT dbo.Projects(ProjectID, Name)
VALUES(1,N'Project 1'),(2,N'Project 2');
INSERT dbo.ProjectManagers(ProjectID,ManagerID)
VALUES(1,1),(1,2),(2,2),(2,3);
Um nun alle Projekte zu finden, die Jim verwaltet:
DECLARE @Manager NVARCHAR(32) = N'Jim';
SELECT p.ProjectID, p.Name
FROM dbo.Projects AS p
INNER JOIN dbo.ProjectManagers AS pm
ON p.ProjectID = pm.ProjectID
INNER JOIN dbo.Managers AS m
ON pm.ManagerID = m.ManagerID
WHERE m.name = @Manager;
Oder Sie können sogar manuell etwas kurzschließen:
DECLARE @Manager NVARCHAR(32) = N'Jim';
DECLARE @ManagerID INT;
SELECT @ManagerID = ManagerID
FROM dbo.Managers
WHERE Name = @Manager;
SELECT p.ProjectID, p.Name
FROM dbo.Projects AS p
INNER JOIN dbo.ProjectManagers AS pm
ON p.ProjectID = pm.ProjectID
WHERE pm.ManagerID = @ManagerID;
Oder noch mehr:
DECLARE @Manager NVARCHAR(32) = N'Jim';
DECLARE @ManagerID INT;
SELECT @ManagerID = ManagerID
FROM dbo.Managers
WHERE Name = @Manager;
SELECT ProjectID, Name
FROM dbo.Projects AS p
WHERE EXISTS
(
SELECT 1
FROM dbo.ProjectManagers AS pm
WHERE pm.ProjectID = p.ProjectID
AND pm.ManagerID = @ManagerID
);
Abgesehen davon hoffe ich wirklich, wirklich, wirklich, dass DISTINCT
in Ihrer ursprünglichen Abfrage ist unnötig. Haben Sie wirklich mehr als ein Projekt mit demselben Namen und ID?