web-dev-qa-db-fra.com

insérer dans les valeurs avec la clause where

J'essaie d'entrer par programme des valeurs dans mon tableau. 

Je ne peux pas utiliser de droites @ variables variables. Je dois utiliser le mot-clé Values.

Comment puis-je créer une clause where lors de l'utilisation de Values ​​dans l'insertion dans. 

J'essaie d'éviter les doublons

  DECLARE @MyID INT
  DECLARE @Phone varchar(10)
  DECLARE @MyDATE DateTime
  DECLARE @Agent as varchar(50)
  DECLARE @Charge as varchar(50)
  DECLARE @Vendor as varchar(50)

  SET @MyID = 215199999
  SET @Phone = '9999999999'
  SET @MyDATE = '2010-12-04 11:56:12.000'
  SET @Agent = 'fbrown'
  SET @Charge = 'NO'
  SET @Vendor = 'NO'

  INSERT INTO [MyDB].[dbo].[Accounts]
  (MyID,Phone,MyDate,Agent,Charge,Vendor)
  VALUES (
  @MyID
  ,@Phone
  ,@MyDATE
  ,@Agent
  ,@Charge
  ,@Vendor 
  ) WHERE MyID NOT IN (@MyID)
6
Internet Engineer
IF NOT EXISTS(SELECT 1 FROM [MyDB].[dbo].[Accounts] WHERE MyID = @MyID)
    INSERT INTO [MyDB].[dbo].[Accounts]
        (MyID, Phone, MyDate, Agent, Charge, Vendor)
        VALUES 
        (@MyID, @Phone, @MyDATE, @Agent, @Charge, @Vendor)
24
Joe Stefanelli

Essayez d'utiliser 

if not exists ( select top 1 * from [MyDB].[dbo].[Accounts] Where MyID = @MyID )
INSERT INTO [MyDB].[dbo].[Accounts]
  (MyID,Phone,MyDate,Agent,Charge,Vendor)
  VALUES (
  @MyID
  ,@Phone
  ,@MyDATE
  ,@Agent
  ,@Charge
  ,@Vendor 
  )
3
Siva Charan

Si vous essayez de vous assurer que la colonne MyID ne contient pas de doublons, vous avez au moins 3 choix: 1) rendez la colonne unique (créez un index sur cette colonne et déclarez-le comme unique, ou , mieux encore, une clé primaire) 2) incrémenter automatiquement la colonne. De cette façon, vous n'avez même pas besoin de lui attribuer de valeur. 4) vous pouvez utiliser la solution de Joe Stefanelli (sur ce fil). Il est convivial pour les programmeurs et vous permet d’attribuer la valeur de votre choix. 

1
Constantin Baciu

De plus, l'option Fusionner (UPSERT) est une bonne option pour une exécution unique. Dans cet exemple, le cas où la correspondance est vérifiée n'est pas rempli, mais vous pouvez ajouter l'instruction WHEN correspondante et mettre à jour les horodatages ou les compteurs.

 MERGE
   Accounts AS target
USING
(select  @MyID as myID ) AS source
ON
   target.myID = source.myID 

WHEN NOT MATCHED THEN
INSERT (MyID,Phone,MyDate,Agent,Charge,Vendor)
  VALUES (
  @MyID
  ,@Phone
  ,@MyDATE
  ,@Agent
  ,@Charge
  ,@Vendor 
  );
0
langeleppel