2015-12-28 2 views
0

Я работаю на хранимую процедуру и я сталкиваюсь с проблемой, я не в состоянии решить, даже с исследованием ...IF в хранимой процедуре

Я хотел бы дать возможность для моего пользователя, чтобы заполнить имя (NOM) на некоторых записях, но они не вынуждены. если они не делают, я хотел бы, чтобы заполнить, если сам с датой, и это моя беда ...

CREATE PROCEDURE [dbo].[G_INSERT](
    @NOM Text = null 
) AS 
BEGIN 
    IF (@NOM IS NULL OR @NOM = '') 
    BEGIN 
     SET @NOM = 'Evaluation du' + CONVERT(text, GETDATE(), 100) 
    END 

    INSERT INTO toto(
     NOM) 
    VALUES (
     @NOM 
    ) 
END 

Это моя текущая процедура, но оно не работает ... Visual Studio оленья кожа сообщить какую-либо ошибку, но когда я нажимаю на «обновление», обновление не выполняется :(

это может быть «если начать ... конец», потому что когда я удалить его, он отлично работает.

Спасибо за вашу помощь!

EDIT:

Текст типов данных и varchar несовместимы в равном оператору. в строке 27 (строка «if», NOM является varchar (300) в БД)

+0

Изменить свой вопрос и объяснить, каким образом удается обновление. –

+0

Я отредактировал его, но он прослушал меня еще больше ... NOM - это varchar (300) – Armassarion

+0

Какие RDBMS это для? Добавьте тег, чтобы указать, используете ли вы 'mysql',' postgresql', 'sql-server',' oracle' или 'db2' - или что-то еще. –

ответ

1

Хорошо, я понял, что @NOM является текстом, в соответствии с процедурой. Простая ошибка.

2

TEXT - устаревший тип данных, который вы больше не должны использовать (см. here).

Вы можете написать хранимую процедуру, как:

CREATE PROCEDURE [dbo].[G_INSERT] (
    @NOM VARCHAR(255) = null 
) AS 
BEGIN 
    IF (@NOM IS NULL OR @NOM = '') 
    BEGIN 
     SET @NOM = 'Evaluation du' + CONVERT(text, GETDATE(), 100) 
    END 

    INSERT INTO toto(NOM) 
     SELECT (CASE WHEN @NOM IS NULL OR @NOM = '' 
        THEN 'Evaluation du ' + CONVERT(VARCHAR(255), GETDATE(), 100) 
        ELSE @NOM 
       END); 
END; 

Вы можете упростить логику и удалить IF.

+0

Я всегда думал, что ТЕКСТ был плох для производительности, но проще в использовании, чем varchar ^^ BTW, я не использовал ТЕКСТ, я просто написал слишком быстро свою процедуру:/ Еще спасибо (и я упрощаю процедуру, чтобы показать вам , это похоже на 20 раз больше, поэтому я скорее использую один маленький IF, чем большой выбор в середине вставки в ^^, по-прежнему благодарю вас за то, что показал мне то, что я не знал: случай выбора) – Armassarion

0

Вы можете использовать этот синтаксис:

CREATE PROCEDURE [dbo].[G_INSERT] (
    @NOM VARCHAR(255) = null 
) AS 
BEGIN 

    INSERT INTO toto(NOM) 
     SELECT iif(@NOM IS NULL OR @NOM = '','Evaluation du ' + CONVERT(VARCHAR(255), GETDATE(), 100),@NOM); 
END; 
Смежные вопросы