我來從MySQL到SQL Server。 SQL Server中以下語法不工作嗎?INSERT INTO SET語法在SQL Server
INSERT INTO table SET fil1="234", fil2="324"
SQL Server中是否有類似的語句?
我來從MySQL到SQL Server。 SQL Server中以下語法不工作嗎?INSERT INTO SET語法在SQL Server
INSERT INTO table SET fil1="234", fil2="324"
SQL Server中是否有類似的語句?
SET
插入記錄的方式不是standard SQL。如果你需要使用類似SQL的更新和插入,你應該在MS SQL-Server中使用存儲,過程代替,例如:
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
這不是線程安全的。您可以通過使存在檢查可序列化或通過重試重複鍵錯誤來修復它。最後一個選項是首選,因爲使其可序列化遲早會產生死鎖。 –
您可能還想查看聯機叢書中的MERGE說明。 – HLGEM
INSERT INTO table (fil1, fil2) VALUES ('234', '324');
插入只有這種語法? (很差) –
不一定是壞事。由於它不是SQL標準。 –
@KakYlia,它是6比1,其他6比1。如果您沒有爲所有字段插入數據,它們都要求您明確聲明您的字段。 – 2011-08-07 16:12:05
這只是有一個獨特的INSERT和UPDATE語句一個大麻煩。如果您必須處理包含30列的表格,您將很容易理解。
MySQL的變異讓我寫代碼的一次 - 它的確需要這兩種東西 - 其實我只需要更換的查詢字符串命令的名稱。
的MSSQL變體由具有幾乎相同的代碼(關於字段名和數據的填補字段)的2倍引發錯誤。
如果我以後更改只是一個單一的字段名就意味着改變2點的位置 - 無論哪種方式,我這樣做是在MSSQL。存儲過程必須更改,並在我的代碼中調用它的插入語句。或者需要更改2個不同的插入和更新語句。這個明顯的錯誤來源完全被歸咎於MSSQL上(至少從我的角度來看)。
多麼混亂的語法!如果我不知道如何使用網絡搜索來查找[文件](http://dev.mysql.com/doc/refman/5.5/en/insert.html),我還以爲有人混淆了UPDATE和INSERT! –
這兩個答案都很有用,謝謝! –
我實際上討厭當前的SQL語法。用小表工作似乎很好,但是當表開始有很多列時,使用Col = value語法更好。 – Rhyous