Problem z UPDATE tabeli

0

Cześć Mam problem i nie mogę sobie z nim poradzić...
Mam tabele, w której chciałbym zmienić kolumnę na dane z 2 złączonych kolumn w tej samej tabeli.
[code]
Tabele Dane
ID----------------KOD----------------NAZWISKO----------------IMIE
1-----------------KOWALSKI_J---------Kowalski----------------Jan
na
ID----------------KOD----------------NAZWISKO----------------IMIE
1-----------------KOWALSKI_JAN-------Kowalski----------------Jan
[/code]
Chciałbym zrobić update na kolumnę KOD, aby było tam KOWALSKI_JAN.
Próbowałem coś takiego, ale żadna składnia nie działa...
[code]
UPDATE Dane SET KOD = CONCAT(Nazwisko,'', Imie)
UPDATE Dane SET KOD = (SELECT CONCAT(Nazwisko,'
',Imie) FROM Dane)
[/code]
Jak to połączyć ?

2

Co to znaczy nie działa - wiersze się nie aktualizują; wiersze się aktualizują, ale na inne wartości; komputer staje w płomieniach?

0

Razcej te 3 :)

Taki komunikat:
[code]
Msg 512, Level 16, State 1, Line 16
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.
[/code]
Szukałem w necie, ale nic konkretnego nie udało mi się znaleźć...

2

Cóż, na pewno to zapytanie:

UPDATE Dane SET KOD = (SELECT CONCAT(Nazwisko,'',Imie) FROM Dane)

... nie może działać, ponieważ jest ono ekwiwalentem czegoś takiego:

for wiersz in dane:
  wiersz.kod = (for wiersz in dane [...])

(tj. dla każdego wiersza próbujesz odpalić podzapytanie zwracające wszystkie połączone nazwiska oraz imiona, a nie tylko to dotyczące obecnie przetwarzanego wiersza.)

Pierwsze z Twoich zapytań wygląda lepiej:

UPDATE Dane SET KOD = CONCAT(Nazwisko,'', Imie)

Co według Ciebie jest z nim nie tak?

0
Patryk27 napisał(a):

Cóż, na pewno to zapytanie:

UPDATE Dane SET KOD = (SELECT CONCAT(Nazwisko,'',Imie) FROM Dane)

... nie może działać, ponieważ jest ono ekwiwalentem czegoś takiego:

for wiersz in dane:
  wiersz.kod = (for wiersz in dane [...])

(tj. dla każdego wiersza próbujesz odpalić podzapytanie zwracające wszystkie połączone nazwiska oraz imiona, a nie tylko to dotyczące obecnie przetwarzanego wiersza.)

Pierwsze z Twoich zapytań wygląda lepiej:

UPDATE Dane SET KOD = CONCAT(Nazwisko,'', Imie)

Co według Ciebie jest z nim nie tak?

Jakbym wiedział co jest nie tak, to od 2 dni by już działało i bym tu nie pisał przecież... Pewnie jest jakiś bzdet, ale takie rzeczy zazwyczaj są najtrudniejsze, jak widać. Programiści na pewno coś na ten temat wiedzą...

[code]
UPDATE Dane SET KOD = (CONCAT(Nazwisko,'', Imie)) ?
[/code]

3

Co to znaczy nie działa - wiersze się nie aktualizują; wiersze się aktualizują, ale na inne wartości; komputer staje w płomieniach?

1

Przecież Ci @Patryk27 napisał co nie działa ... próbujesz do pola kod wpisać coś takiego:

Kowalski Jan
Nowak Piotr
...
Waza Zygmunt III

natomiast co do tego zapytania:

UPDATE Dane SET KOD = CONCAT(Nazwisko,'', Imie)

podaj komunikat, który dostajesz bo śmiem twierdzić, że będzie inny niż to

Msg 512, Level 16, State 1, Line 16
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.

0
woolfik napisał(a):

Przecież Ci @Patryk27 napisał co nie działa ... próbujesz do pola kod wpisać coś takiego:

Kowalski Jan
Nowak Piotr
...
Waza Zygmunt III

natomiast co do tego zapytania:

UPDATE Dane SET KOD = CONCAT(Nazwisko,'', Imie)

podaj komunikat, który dostajesz bo śmiem twierdzić, że będzie inny niż to

Msg 512, Level 16, State 1, Line 16
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.

Oto komunikat po uruchomieniu polecenia:
UPDATE Dane SET KOD = CONCAT(Nazwisko,'', Imie)
[code]
Msg 8152, Level 16, State 30, Line 1
String or binary data would be truncated.
The statement has been terminated.
[/code]

0

jaką masz długość pola kod, imię i nazwisko? A najlepiej to daj DDL tabeli

0
abrakadaber napisał(a):

jaką masz długość pola kod, imię i nazwisko? A najlepiej to daj DDL tabeli

[code]
kod varchar(80)
nazwisko nvarchar(40)
imie nvarchar(40)
[/code]

0

kod masz varchar a imię i nazwisko nvarchar

0

Czy to jakaś znacząca różnica ? Jakie rozwiązanie przyjąć ?
Udało się...
Zmieniłem na VARCHAR.

1

varchar to znaki 8 bitowe a nvarchar to unicode, który może zawierać znaki, które zajmują nawet 32 bity (4 bajty)

0

Jeden problem został rozwiązany, ale pojawił się kolejny:
[code]
Cannot insert duplicate key row in object 'Dane' with unique index 'PRAC.KODY'. The duplicate key value is (KOWALSKI_JAN).
[/code]
[code]
Tabela DANE
ID--------IDENT--------MOJE.KODY------------NAZWISKO----------IMIE
1---------10-----------KOWALSKI_JAN---------Kowalski----------Jan
[/code]
[code]
Tabela PRAC
ID--------IDENT--------PRAC.KODY--------NR-----------ZAM
1---------10-----------KOWALSKI_J-------222----------22/22

UPDATE PRAC SET PRAC.KODY = d.MOJE.KODY FROM PRAC p JOIN DANE d ON p.PRAC.KODY = d.MOJE.KODY
[/code]
Chciałem wypełnić kolumnę PRAC.KODY w tabeli PRAC danymi z kolumny MOJE.KODY z tabeli DANE i właśnie wyskakuje mi taki błąd...
Będę bardzo wdzięczny za pomoc...

0

jak masz klucz główny albo indeks unikalny na polu to nie możesz wrzucić kilku rekordów z taką samą wartością, co zresztą masz napisane w komunikacie

0
abrakadaber napisał(a):

jak masz klucz główny albo indeks unikalny na polu to nie możesz wrzucić kilku rekordów z taką samą wartością, co zresztą masz napisane w komunikacie

Tak, to rozumiem, ale to jest baza, którą muszę ogarnąć po spadku od kogoś...
Okazuje się, że te 2 tabele łączy jedna wspólna rzecz kolumna nazywa się "IDENT"
W tabeli "DANE" występują z jakiś powodów duplikaty i tu się SQL pewnie gubi...
Jak wyciąć duplikaty w tabeli DANE i zrobić update w tabeli PRAC ?
Jak w łatwy sposób przepisać dane z kolumny PRAC.KODY w tabeli PRAC do kolumny MOJE.KODY z tabeli DANE ?

0

nie mam pojęcia co chcesz zrobić

0

Jak wyciąć duplikaty ? Prosty i czytelny sposób :) ale tylko dla 'prostej tabelki' (bez automat.nadawania kluczy,etc.)

  1. tworzysz tabelkę pomocniczą (kopię tabeli_z_duplikatami)
  2. Wykonujesz insert do nowej tabeli as select DISTINCT kol1,kol2... from tabela_z_duplikatami
  3. Usuwasz dane z tabeli z duplikatami, insertujesz z tabeli pomocniczej, usuwasz tabele pomocniczą
0
abrakadaber napisał(a):

nie mam pojęcia co chcesz zrobić

No przecież piszę...
Jak w łatwy sposób przepisać dane z kolumny PRAC.KODY w tabeli PRAC do kolumny MOJE.KODY z tabeli DANE ?

1

"Cannot insert duplicate key row in object 'Dane' with unique index 'PRAC.KODY'. The duplicate key value is (KOWALSKI_JAN)."

Mowiac prosto, powyzej masz juz pewne podpowiedzi, powyzszy blad mowi, ze masz unikalny index na kolumnie: 'PRAC.KODY' czyli nie mozesz do tej kolumny wstawic wiecej niz jednej takiej samej wartosci - a probujesz wstawic wlasnie wiecej niz jeden rekord z wartoscia: (KOWALSKI_JAN).

Byc moze podales za malo informacji, aby ktos mogl pomoc, zastanow sie dlaczego wstawiasz wiecej niz jedna taka sama wartosc - czy tak powinno byc? czy moze chcesz to zmienic? moze teraz chcesz miec wiecej takich samych wartosci w docelowej tabeli (wowczas powinienes zmienic unique index na index)?

W kazdym razie pokaz nam (zrzut ekranu lub wklej txt z tabel) wszystkie rekordy z wartoscia: "KOWALSKI_JAN" ktore masz w obu tabelach, mysle, ze wowczas bedzie latwiej zrozumiec co wynika z tych danych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1