2011-07-20 15 views
1

"StudentTable"のWHERE句を "StudentID"に更新する "StudentTable"に "StudentID"がない場合は、代わりにデータを挿入したいレコードが既に存在するかどうかに応じて更新または挿入

私はこれをどのように行うことができます

+0

あなたはプレーンSQLでこれを行うたいか、あなたがプログラミング言語のいくつかの種類がありますか? – Dukeatcoding

+0

使用しているSQL Serverのバージョンをタグ付けするか指定してください。*この情報は、あなたの質問に含めるのに常に役立ちます。これを実現する "より安全な"方法がありますが、古いバージョンのSQL Serverを使用している場合は必ずしも有効ではありません。 –

+0

[Atomic UPSERT in SQL Server 2005](http://stackoverflow.com/questions/2522379/atomic-upsert-in-sql-server-2005) –

答えて

2

あなたはそれがない場合、レコードは、存在する場合は、最初のチェック更新を実行する、 が存在しない場合は、挿入する必要があることを意味します。ここで

あなたが行く:

IF EXISTS(SELECT * FROM StudentTable WHERE StudentID = @MyID) 
    BEGIN 
    --exists perform update 
    UPDATE StudentTable SET Grade = 'A+' WHERE [email protected] 
    --other code... 
    END 
ELSE 
    BEGIN 
    --record does not exist INSERT it 
    INSERT INTO StudentTable(MyID, Grade) VALUES (@MyID, 'A+') 
    --other code... 
    END 
+1

T-SQLでは、コメント指定子はアポストロフィではなく - です。そして、BEGIN/ENDのものはここでは必要ありません。しかし、それは良い答えです。 – hoodaticus

+2

@hoodaticus - 現時点ではvb.netアプリで作業していて、vb.netでコメントしています。残念ながら、begin/endステートメントは、他のステートメントが存在しない場合は不要です。begin/endステートメントを終了するかどうかを判断できるように、他のステートメントがある可能性があります。 – JonH

+0

私はそれがVBの漏れだと思った: – hoodaticus

1

あなたはマージを使用することができます。?http://www.mssqltips.com/tip.asp?tip=1704

MSDNのドキュメント:http://msdn.microsoft.com/en-us/library/bb510625.aspx

+0

MERGEはSQL Server 2008の時点で新しくなっています。古いバージョンでは動作しません。 –

+0

良い点があります。下位互換性を最大限にするには、@ JonHのようなソリューションが一番です。 – mservidio

+0

Wow - 私はマージについて知らなかった - それはクールです。下位互換性???ウィスキーアーツウィルウィズウィス? – Chains

関連する問題