вставить в значения с предложением где - PullRequest
6 голосов
/ 06 февраля 2012

Я пытаюсь программно ввести значения в мою таблицу.

Я не могу использовать прямой Select @variables.Я должен использовать ключевое слово Values.

Как создать предложение where при использовании значений в вставке в.

Я стараюсь избегать дубликатов

  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)

Ответы [ 4 ]

24 голосов
/ 06 февраля 2012
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)
3 голосов
/ 06 февраля 2012

Попробуйте использовать

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 
  )
1 голос
/ 06 февраля 2012

Если вы пытаетесь убедиться, что столбец MyID не содержит дубликатов, у вас есть как минимум 3 варианта: 1) сделать столбец уникальным (создать индекс для этого столбца и объявить его уникальным или, что лучше,все же первичный ключ) 2) сделать автоинкремент столбца.Таким образом, вам даже не нужно присваивать ему значения.4) вы можете использовать решение Джо Стефанелли (в этой теме).Это дружественный к программисту и позволяет вам назначить любое значение, которое вы хотите.

0 голосов
/ 30 июля 2016

Также опция Merge (UPSERT) является хорошим вариантом для одного выполнения. в этом примере, когда сопоставление не заполнено, вы можете добавить оператор сопоставления WHEN и обновить временные метки или счетчики.

 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 
  );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...