munzur wrote: ↑10. Aug 2023, 11:21
/***********************************************************************
* DESCRIPTION : Creates a record in the table 'Dhcp_Entries' for all clients
* having a macaddress and no PXE flag
***********************************************************************/
DECLARE @ClientID int
DECLARE @MACAddress CHAR(12)
DECLARE @UUID uniqueidentifier
DECLARE @IPAddress varchar(255)
DECLARE @SubnetMask varchar(255)
DECLARE @StandardGateway varchar(255)
DECLARE @DNSServer varchar(255)
DECLARE @Name varchar(50)
DECLARE @PXEID int
--
-- Create missing records in Dhcp_Entries
DECLARE PXE_Cursor CURSOR FOR
SELECT Client_id, MACAddress, UUID, IPAddress, SubnetMask, StandardGateway, DNSServer, [name]
FROM Clients
WHERE LEN(MACAddress) BETWEEN 8 AND 12 AND Client_id NOT IN (SELECT Client_id FROM Dhcp_Entries)
AND MACAddress NOT IN (SELECT macaddress FROM clients WHERE LEN(macaddress) = 12 GROUP BY macaddress HAVING (COUNT(macaddress)) > 1)
AND [name] NOT IN (SELECT [name] FROM clients GROUP BY [name] HAVING (COUNT([name])) > 1)
AND UUID NOT IN (SELECT UUID FROM clients GROUP BY UUID HAVING (COUNT(UUID)) > 1)
AND MACAddress NOT IN (SELECT haddress FROM Dhcp_Entries)
AND [name] NOT IN (SELECT info FROM Dhcp_Entries)
AND UUID NOT IN (SELECT UUID FROM Dhcp_Entries)
--
OPEN PXE_Cursor
FETCH NEXT FROM PXE_Cursor INTO @ClientID, @MACAddress, @UUID, @IPAddress, @SubnetMask, @StandardGateway, @DNSServer, @Name
--
WHILE @@FETCH_STATUS = 0
BEGIN
IF CHARINDEX(',', @StandardGateway) > 0
SET @StandardGateway = Substring(@StandardGateway, 1, CHARINDEX(',', @StandardGateway) - 1);
IF CHARINDEX(',', @DNSServer) > 0
SET @DNSServer = Substring(@DNSServer, 1, CHARINDEX(',', @DNSServer) - 1);
--
INSERT INTO Dhcp_Entries (bootinfo, haddress, ipaddress, netmask, gateway, dns, timelease, info, UUID, Client_id)
VALUES (2, @MACAddress, dbo.fnc_GetFirstIP(@IPAddress), dbo.fnc_GetFirstIP(@SubnetMask), @StandardGateway, @DNSServer, 1000, @Name, @UUID, @ClientID)
SELECT @PXEID = SCOPE_IDENTITY()
UPDATE Clients SET pxe_id = @PXEID WHERE client_id = @ClientID
--PRINT @ClientID
--
FETCH NEXT FROM PXE_Cursor INTO @ClientID, @MACAddress, @UUID, @IPAddress, @SubnetMask, @StandardGateway, @DNSServer, @Name
END
CLOSE PXE_Cursor
DEALLOCATE PXE_Cursor;
-- Set the id of matching Dhcp_Entries to the Clients table
UPDATE Clients SET pxe_id = (SELECT de.id FROM Dhcp_Entries de WHERE de.haddress = MACAddress AND de.UUID = UUID)
WHERE pxe_id NOT IN (SELECT id FROM Dhcp_Entries)
#####################################
Hier wird allerdings für jeden Client das Flag gesetzt.