c#
  • sql
  • sql-server
  • 2017-03-23 12 views -1 likes 
    -1

    SQlクエリを知る必要があります。レコードが存在しない場合、またはレコードが存在する場合はSQL Serverに新しいレコードを挿入する方法SQL Serverは、存在しない場合は新しいレコードを挿入します。C#

    私はあなたが、このよう 例を行うことができます

    string sql= "if record not exists (select * from OpCircular Where circular_No='" + tbcicularno.Text.Trim() + "') INSERT INTO OpCircular(circular_No, fromDate, toDate, empId) VALUES ('" + tbcicularno.Text.Trim() + "','" +from+ "','" + to + "','Testing') If not Exists Update Set fromDate='" +from+ "'" 
    
    +0

    のためだけのプレースホルダですSCD1の実装です。この記事を読む(http://www.databasejournal.com/features/mssql/managing-slowly-changing-dimension-with-merge-statement-in-sql-server.html) – Utsav

    +0

    あなたが表示するコードここではSql Injection攻撃に対して脆弱です。 SqlCommandParametersを使用します。 – rene

    +0

    @reneはい私はそれを知っていますが、このプログラムは私たちの組織内でしか使用していません。 –

    答えて

    0

    をしようとしたものを1以下ザ・:

    if exists(select 1 from table where id = 4) 
    begin 
    (do what u want) 
    end 
    else 
    begin 
    (do what u want) 
    end 
    
    +0

    それは私が欲しいものです、ありがとう! –

    0

    次のコードを試してください:すべての

    IF EXISTS(SELECT TOP(1) Id FROM Article WHERE CategoryId = 3) 
        BEGIN 
         -- Update Script 
        END 
    ELSE 
        BEGIN 
         -- Insert Script 
        END; 
    
    0

    まず、新しいレコードを挿入しながら、必要な操作を実行しながら、テーブルのすべてのレコードをチェックする必要があります。

    あなたは、次の操作を行うことができます:

    カウンタ変数を宣言し、今0

    declare @icnt int = 0

    でそれを初期化し、テーブルからレコードをチェックして、変数に数を格納します。

    set @icnt = select count(*) from 'YourTableName' where (here you need to check all the fields with "and" condition)

    今すぐ列が存在する場合は@icntの値は1になります。それ以外の場合は0になります。このようにif..else条件を設定します。それは多くの利点を持って、あなたは、SQLインジェクション攻撃から保護することができますように私は強く、ストアドプロシージャを使用することをお勧めします

    0

    this documentよう

    if(@icnt > 0) begin (Put your update query here) end else (Put your insert query here) end

    は、より多くのために、あなたも行うことができます。ここで指定したIDが存在しない場合は、テーブル内のレコードを挿入し、IDENTITYを返すか、それはそれを更新したサンプルSPは次のとおりです。SQL Management Studioの で

    CREATE PROCEDURE [dbo].[usp_product_insert_update] 
    -- Add the parameters for the stored procedure here 
    @id int=NULL, 
    @description nvarchar(50) 
    AS 
    BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 
    
    UPDATE Product 
    SET [email protected] 
    WHERE [email protected] 
    
    
    IF (@@ROWCOUNT=0) 
        INSERT INTO Product (Description) 
        OUTPUT Inserted.ID 
        VALUES (@description) 
    
    END 
    

    この呼び出しは、レコードや意志を挿入しますこの呼び出しは、ID = 1

    usp_product_insert_update 1,'Demo2' 
    
    +0

    私はそれに取り組んでいただきありがとうございます! –

    0

    レコードを更新しますあなたは2008年以来、SQLサーバーのためのMergeを試すことができます= 1

    usp_product_insert_update null,'Demo' 
    

    IDを返す:

    MERGE INTO OpCircular WITH (HOLDLOCK) AS target 
    USING 
    (SELECT :circular_No as circular_No) as source 
    ON 
    (target.circular_No = source.circular_No) 
    WHEN MATCHED THEN UPDATE SET fromDate = :fromDate 
    WHEN NOT MATCHED THEN INSERT (circular_No, fromDate, toDate, empId) 
             VALUES (:circular_No, :fromDate, :toDate, 'Testing'); 
    

    注:すべての[:識別子]は、あなたが欲しいあなたの外部データ

    関連する問題