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.

Tabele Dane
ID----------------KOD----------------NAZWISKO----------------IMIE
1-----------------KOWALSKI_J---------Kowalski----------------Jan
na
ID----------------KOD----------------NAZWISKO----------------IMIE
1-----------------KOWALSKI_JAN-------Kowalski----------------Jan

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...

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

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:

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.

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ą...


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

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)

Msg 8152, Level 16, State 30, Line 1
String or binary data would be truncated.
The statement has been terminated.

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


kod varchar(80)
nazwisko nvarchar(40)
imie nvarchar(40)

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