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ć ?
Co to znaczy nie działa
- wiersze się nie aktualizują; wiersze się aktualizują, ale na inne wartości; komputer staje w płomieniach?
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źć...
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?
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]
Co to znaczy
nie działa
- wiersze się nie aktualizują; wiersze się aktualizują, ale na inne wartości; komputer staje w płomieniach?
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.
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]
jaką masz długość pola kod, imię i nazwisko? A najlepiej to daj DDL tabeli
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]