【SQL】データあればUPDATE、なければINSERT ~ @@ROWCOUNT ~

SQL Server2005以前 / Oracle 9iより前

 * UPDATEしてみて、実行件数が0件なら、INSERTする

SQL Server

 * @@ROWCOUNT を利用する

サンプル

DECLARE @name nvarchar(50)
SET @name = 'Tom'
DECLARE @address nvarchar(50)
SET @address = '1-23 London'
DECLARE @email varchar(50)
SET @email = 'tom@gmail.com'
DECLARE @age int
SET @age = 50

UPDATE [Person]
   SET [Address] = @address
      ,[Email] = @email
      ,[Age] = @age
 WHERE [Name] = @name
IF @@ROWCOUNT = 0
BEGIN
 INSERT INTO [Person]
           ([Name]
           ,[Address]
           ,[Email]
           ,[Age])
     VALUES
           (@name
           ,@address
           ,@email
           ,@age)
END

参考文献

http://www.ilovex.co.jp/blog/system/cat820/sqlserversql.html

SQL Server2008以降 / Oracle 9i以降

 * MERGE文を使う
 * 詳細は以下の記事を参照のこと
http://blogs.yahoo.co.jp/dk521123/30657481.html

関連記事

ストアドファンクション

http://blogs.yahoo.co.jp/dk521123/33329958.html

PostgreSQL】UPDATE or INSERT を行うストアドの作成

http://blogs.yahoo.co.jp/dk521123/33945911.html

INSERT / UPDATEを行い、それ以外のレコードはDELETEをする

http://blogs.yahoo.co.jp/dk521123/33954185.html

データあればUPDATE、なければINSERT

http://blogs.yahoo.co.jp/dk521123/30656970.html

SQL】レコードが存在していなかったら、INSERTするには

http://blogs.yahoo.co.jp/dk521123/34139759.html

データあればUPDATE、なければINSERT

http://blogs.yahoo.co.jp/dk521123/36225584.html