Proste zapytanie SQl 2008

0

Witam

    Mam taki problem, zostałem zmuszony do zmiany bazy danych dla działającego programu. Obyło sie bez większych problemów za wyjątkiem jednej komendy update. Do dzis program działał na bazie INTERBASE i komende wywoływałem o tak:

pstmt = polaczenie.prepareStatement("update pomysl set nota=? where nr=?");
pstmt.setString(1, "tekst");
pstmt.setString(2, "tekst");
pstmt.executeUpdate();

czyli z sql np:: update pomysl set nota="tekst" where nr="1"

Wszystko działało sprawnie, program przeniosłem na bazę SQL 2008, tebele zostały zorbione analogicznie. Wszystkie kolumny są typy 'text'. Z insertami nie ma problemu jednak update przestały działać.

Przeniosłem dobie zapytanie bezpiśrednio do konsoli SQL i tu ko mojemu zaskoczeniu nie działa nadal ;/
Chyba notacja musi sie różnić.
Mam takie zapytanie:

UPDATE [KAIZEN].[dbo].[Pomysl] SET [NOTA]="tekst" WHERE [NR]="1"

wywala mi błąd:

Msg 207, Level 16, State 1, Line 1
Invalid column name '1'.

UPDATE [KAIZEN].[dbo].[Pomysl] SET [NOTA]='tekst' WHERE [KAIZEN].[dbo].[Pomysl].[NR]='1'

Msg 402, Level 16, State 1, Line 1
The data types text and varchar are incompatible in the equal to operator.

Zmieniałem to zapytanie na 50 sposobów, nic nie skutkuje. ;/ Nie znam notacji w bazie SQL 2008.

NAZWA BAZY: KAIZEN
TABELA: POMYSL
POLA NOTA, STATUS, NR (klucz) - wszystkie typu text. Może to przez typ się tak wykrzacza, jednak odawac nowe rekordy moe problem jest tylko z update.

Prosze o wskazówkę.

0

W ramach samokształcenie wykonałem jeszcze roste zapytania:

SELECT * FROM POMYSL - działa poprawnie ale juz
SELECT * FROM POMYSL WHERE NR="1" - Invalid column name '1'.
SELECT * FROM POMYSL WHERE NR='1 - 'The data types text and varchar are incompatible in the equal to operator.
SELECT * FROM POMYSL WHERE NR=1 - Operand type clash: text is incompatible with tinyint

jak w takim razie zadac to zapytanie, bo chyba tu jest problem (w odniesieniu do wartości wekstowej)?

0

Rozwiązanie znalezione, tabele do których odwołuje się w zapytaniach nie mogą mieć typu 'text', po zmianie na VARCHAR wszytko działa poprawnie.

0

Niewiele jest rzeczy gorszych od trzymania liczbowych identyfikatorów w tekstowych polach, a już szczególnie wtedy, kiedy funkcjonują jako klucze główne (co sugeruje nazwa "NR"). Masz kilka typów liczbowych, wybierz sobie dla takiego pola int, oznacz je jako identity (1, 1) i primary key i będziesz mieć to zrobione po ludzku.
Drugą sprawą jest nazywanie czegokolwiek po polsku... Językiem, w którym programujesz, jest angielski, więc dla spójności wszystko powinno być po angielsku. Tak samo dla spójności pole powinno nazywać się Id (bo takiej składni używa C#), id (php, java), ale nie ID i już na pewno nie NR.

Ostatnia rzecz - typ text jest oznaczony jako deprecated, czyli przestarzały. Zamiast text powinieneś używać varchar(max), ale - ponownie - nie używa się tekstu do trzymania liczb.

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