1
我怎樣才能生成腳本,而不是手動編寫MSSQL腳本數據插入或更新
if exists (select ... where id = 1)
insert ...
else
update ...
很無聊做,與多條記錄!
使用management studio生成腳本'僅數據'僅生成插入。因此,針對現有的db運行會導致主鍵出錯。
我怎樣才能生成腳本,而不是手動編寫MSSQL腳本數據插入或更新
if exists (select ... where id = 1)
insert ...
else
update ...
很無聊做,與多條記錄!
使用management studio生成腳本'僅數據'僅生成插入。因此,針對現有的db運行會導致主鍵出錯。
對於SQL 2008年起,你可以開始使用了CTE
一個典型的ID /描述查找表一個簡單的例子沿Merge
聲明
WITH stuffToPopulate(Id, Description)
AS
(
SELECT 1, 'Foo'
UNION SELECT 2, 'Bar'
UNION SELECT 3, 'Baz'
)
MERGE Your.TableName AS target
USING stuffToPopulate as source
ON (target.Id = source.Id)
WHEN MATCHED THEN
UPDATE SET Description=source.Description
WHEN NOT MATCHED THEN
INSERT (Id, Description)
VALUES (source.Id, source.Description);
合併報表有一堆的其他功能是有用(如NOT MATCHED BY DESTINATION
,NOT MATCHED BY SOURCE
)。文檔(上面鏈接)會給你更多的信息。
[Atomic UPSERT in SQL Server 2005]可能的重複(http://stackoverflow.com/questions/2522379/atomic-upsert-in-sql-server-2005) –