2015-04-08 4 views
1
string sSQL = @"UPDATE [MyTable1] 
    SET AT09 = GETDATE() 
    ,AT80 = 'IP' 
    ,AT83 = 'CO' 
    ,AT34 = GETDATE() //ONLY IF IT IS NOT EMPTY 
    ,AT84 = '" + sU + "' WHERE AS = 0"; 

я имею выше запрос в C# и то, что я ищу, чтобы сделать это обновляет AT34 поля, только если это не имеет значения.Как заполнить столбец таблицы SQL только в первый раз

Так довольно много, когда запрос выполняется первый, он добавит текущую дату, но любое последующее время, он не будет (данный столбец заполняется с датой)

Как я могу добиться этого.

+1

... где at34 не является нулевым? – Jeremy

+1

его предложение where WHERE AS = 0, добавление 'at34 не null 'будет обновлять только подмножество этих строк. – 1010

+0

@ 1010 Да, если AS = 0, обновите таблицу. – SearchForKnowledge

ответ

7

Попробуйте

string sSQL = @"UPDATE [MyTable1] 
SET AT09 = GETDATE() 
,AT80 = 'IP' 
,AT83 = 'CO' 
,AT34 = (CASE WHEN AT34 IS NULL THEN GETDATE() ELSE AT34 END) 
,AT84 = '" + sU + "' WHERE AS = 0"; 
+0

Спасибо. Все они отличные ответы, но это полный. – SearchForKnowledge

2

Используйте фразу, которая гласит: AT34=Case When AT34 is null then GetDate() else AT34 End в том месте, где вы используете AT34=GetDate().

3
string sSQL = @"UPDATE [MyTable1] 
SET AT09 = GETDATE() 
,AT80 = 'IP' 
,AT83 = 'CO' 
,AT34 = CASE WHEN AT34 IS NULL THEN GETDATE() ELSE AT34 END 
,AT84 = '" + sU + "' WHERE AS = 0"; 
3

вы можете использовать это выражение присвоить значение at34 в

AT34 = ISNULL(AT34, GETDATE()) 
1

Используйте этот

string sSQL = @"UPDATE [MyTable1] 
    SET AT09 = GETDATE() 
    ,AT80 = 'IP' 
    ,AT83 = 'CO' 
    ,AT34 = CASE WHEN AT34 IS NOT NULL   
          THEN GETDATE() 
          ELSE AT34 
        END //ONLY IF IT IS NOT EMPTY 
    ,AT84 = '" + sU + "' 
WHERE AS = 0"; 
1

Используйте ISNULL ...

string sSQL = @"UPDATE [MyTable1] 
SET AT09 = GETDATE() 
,AT80 = 'IP' 
,AT83 = 'CO' 
,AT34 = ISNULL(AT34, GETDATE()) //ONLY IF IT IS NOT EMPTY 
,AT84 = '" + sU + "' WHERE AS = 0"; 

... или вызовите две команды обновления, как с условиями условия. Одно условие, где следует проверить, если дата имеет нулевое значение, а другой, где условие проверки, если это не ...

string sSQL = @"UPDATE [MyTable1] 
SET AT09 = GETDATE() 
,AT80 = 'IP' 
,AT83 = 'CO' 
,AT34 = GETDATE() //ONLY IF IT IS NOT EMPTY 
,AT84 = '" + sU + "' WHERE AS = 0 AND AT34 IS NULL 
    UPDATE [MyTable1] 
SET AT09 = GETDATE() 
,AT80 = 'IP' 
,AT83 = 'CO' 
,AT84 = '" + sU + "' WHERE AS = 0 AND AT34 IS NOT NULL"; 
+0

Я думаю, что в этом случае два варианта обновления будут работать хуже. – 1010

+0

Зависит от размера стола. Если это не будет огромным, это не будет иметь заметной разницы. Но я согласен, что подход ISNULL короче и читабельнее – Asher

1

Хорошо, вы можете сделать это с помощью C# состояние также.

  1. Сначала запустите запрос, чтобы получить строку, которую вы хотите обновить.
  2. Проверьте, нет ли AT34 или нет.
  3. Если AT34 пуст, запустите запрос при записи.
  4. Else выполнить запрос обновления без AT34 = GETDATE()

Надеется, что это помогает

1

Вариант 1: набора AT34 = IsNull (GETDATE(), AT34)

Вариант 2:

set AT34 CASE WHEN AT34 IS NULL THEN getdate() ELSE AT34 END

Смежные вопросы