Как поменять местами поля guid из 1 строки в другую в MS SQL ?
Ладно, я довольно новичок в SQL, так что, вероятно, я далеко отсюда, но вот что я хочу сделать. У меня есть tblFixtures, который содержит Guid игроков, которые были нарисованы, чтобы играть друг с другом в нокауте пула. tblFixtures имеет столбцы uniqueidentifier player1 и player2. Я уже добавил "Byes", потому что общее количество игроков, необходимых для такого нокаута, равно 8.. так, например, если в tblFixtures есть только 6 игроков, он добавляет 2 пустых игрока с Guid "00000000-0000-0000-0000-000000000000". Таким образом, 2 игрока получат "свободный проход в следующий раунд" ("пока"), но мне нужно переставить стол на случай, если "пока" окажется вничью против такого "пока".
Игрок 1 Игрок 2
{72462373-6B64-4427-9F9F-9A872261A333} v {9C90B324-78CA-4C7B-BC79-15537F3935B2}
{00000000-0000-0000-0000-000000000000} в {00000000-0000-0000-0000-000000000000}
{3E828BB1-AEC2-4543-BD26-E12AD886D2E8} v {72462373-6B64-4427-9F9F-9A872261ABC2}
{4F9C3964-2672-4413-8A01-2ED09CA7A711} v {AFEB20EB-5CCB-4302-A999-CC772F8ABACE}
Мне нужно, чтобы он поместил пустой Guid в любом месте против такого GUID игрока, как этот..
Игрок 1 Игрок 2
{72462373-6B64-4427-9F9F-9A872261A333} v {9C90B324-78CA-4C7B-BC79-15537F3935B2}
{3E828BB1-AEC2-4543-BD26-E12AD886D2E8} в {00000000-0000-0000-0000-000000000000}
{00000000-0000-0000-0000-000000000000} v {72462373-6B64-4427-9F9F-9A872261ABC2}
{4F9C3964-2672-4413-8A01-2ED09CA7A711} v {AFEB20EB-5CCB-4302-A999-CC772F8ABACE}
Приведенный ниже код требует СВЕРХКОМАНДЫ и нескольких настроек, я думаю, но это все, что я мог получить. То, что я пытаюсь сделать, - это проверить, сколько игроков (включая BYES) есть, так что в этом случае есть 8, и это хранится в @matches. Теперь я хочу, чтобы он проверял строку за раз, используя цикл, равный сумме, хранящейся в @matches.. Эта проверка выглядит пустой 0-это идентификатор GUID, играя пустой 0 GUID-идентификатора. Если он будет найден, то он заменит Player1 в этой строке на следующий none blank player1 Guid, который он найдет, и обнулит его вместо этого.
Я просто еще не знаю, что понимаю, и не уверен, что остальная часть кода действительно будет работать, или кто-нибудь знает более простой способ сделать это?
Любая помощь будет оценена по достоинству. Вот что у меня есть на данный момент..
Объявить @matchess int
Выберите @matches = COUNT(accountID) из tblFixtures)*
Объявить @cnt INT = 0
Что я уже пробовал:
SELECT player1, ROW_NUMBER() OVER (ORDER BY player1) AS RowNumber FROM tblFixtures DECLARE @Players int SELECT @Players = COUNT(accountID) from tblEntrants WHERE paid='y' DECLARE @cnt INT = 0 WHILE @cnt < @Players BEGIN If (SELECT Player1 WHERE ROW_NUMBER() OVER (ORDER BY Player1) FROM tblFixtures)=@cnt = '00000000-0000-0000-0000-000000000000' AND SELECT(player1 WHERE ROW_NUMBER() OVER (ORDER BY Player1 FROM tblFixtures)= @cnt) ='00000000-0000-0000-0000-000000000000' THEN BEGIN UPDATE tblFixtures SET Player1 = SELECT(TOP(1) player1 WHERE player1 <> '00000000-0000-0000-0000-000000000000' AND ROW_NUMBER() OVER (ORDER BY Player1) FROM tblFixtures>@cnt) WHERE ROW_NUMBERr() OVER (ORDER BY Player1) FROM tblFixtures=@cnt UPDATE tblFixtures SET Player1 = '0000-0000-0000-0000' WHERE SELECT(Top(1) player1) <> '00000000-0000-0000-0000-000000000000' AND ROW_NUMBER() FROM tblFixtures>@cnt END SET @cnt = @cnt + 1 END