Pochodzę z mySQL na SQL Server. Czy następująca składnia nie działa w SQL Server?Składnia INSERT INTO SET w SQL Server
INSERT INTO table SET fil1="234", fil2="324"
Czy istnieje porównywalne oświadczenie w SQL Server?
Pochodzę z mySQL na SQL Server. Czy następująca składnia nie działa w SQL Server?Składnia INSERT INTO SET w SQL Server
INSERT INTO table SET fil1="234", fil2="324"
Czy istnieje porównywalne oświadczenie w SQL Server?
SET
sposobem wstawiania rekordów nie jest standard SQL. Jeśli jest to potrzebne, aby używać podobnych sql dla aktualizacji i wkładek, należy użyć magazynowanych procedur opisanych w MS SQL Server zamiast, na przykład:
CREATE Procedure tableInsertUpdate
(
@ID int,
@fil1 int,
@fil2 int,
@IDOut int OUTPUT
)
AS
IF EXISTS(SELECT ID from table WHERE [email protected])
BEGIN
UPDATE table SET
fil1 = @fil1
fil2 = @fil2
WHERE [email protected]
SET @IDOut=null
END
ELSE
BEGIN
INSERT INTO table
(fil1, fil2)
VALUES
(@fil1, @fil2)
SET @IDOut=scope_identity()
END
To nie jest bezpieczne dla wątków. Możesz to naprawić, sprawiając, że istnieje możliwość seryjnego sprawdzania lub ponawiając duplikat błędu klucza. Preferowana jest ostatnia opcja, ponieważ uczynienie jej serializacją spowoduje prędzej czy później powstanie zakleszczenia. –
Możesz również spojrzeć na statystyki MERGE w Books Online. – HLGEM
INSERT INTO table (fil1, fil2) VALUES ('234', '324');
Wstaw ma tylko tę składnię? (tak biedny) –
Niekoniecznie coś złego. Ponieważ nie jest to standard SQL. –
@KakYlia, to od 6 do jeden, pół tuzina do drugiego. Oba wymagają jawnego podania swoich pól, jeśli nie wprowadzasz INSERTing danych dla wszystkich pól. –
To tylko wielki kłopot posiadającym INSERT i UPDATE. Łatwo zrozumiesz, jeśli będziesz musiał pracować z tabelami zawierającymi 30 kolumn.
Wariant MySQL pozwala mi pisać kod jeden raz - i robi oba potrzebne rzeczy - w rzeczywistości wystarczy zastąpić nazwę polecenia w ciągu znaków zapytania.
Wariant MSSQL wywołuje błędy, mając prawie taki sam kod (pod względem nazw pól i danych, aby wypełnić pola) 2 razy.
A jeśli później zmienię tylko jedną nazwę pola, oznacza to zmianę 2 pozycji kodu - tak czy inaczej zrobię to w MSSQL. Procedura składowana musi zostać zmieniona, a instrukcja insert wywołuje ją w moim kodzie. Lub w razie potrzeby 2 różne instrukcje wstawiania i aktualizacji wymagają zmiany. To oczywiste źródło błędów jest całkowicie obwiniane (przynajmniej z mojego punktu widzenia) na MSSQL.
Co za myląca składnia! Gdybym nie wiedział, jak korzystać z wyszukiwania w Internecie do [dokumentacji] (http://dev.mysql.com/doc/refman/5.5/en/insert.html), pomyślałbym, że ktoś pomieszał UPDATE i WSTAW! –
Oba ansvers są przydatne dzięki! –
Rzeczywiście nienawidzę obecnej składni SQL. Wydaje się, że dobrze działa z małymi tabelami, ale gdy tabela zaczyna mieć wiele kolumn, o wiele przyjemniej jest użyć składni Col = value. – Rhyous