2013-05-28 2 views
1

Я хочу знать, как освободить IF с обновлением и как выполнить процедуру с использованием входа nvarchar. Там нет таблицы Словарь с 2 значениями («Orig», «Перевод») мне нужно процедуру, которая добавляет или заменить «Trasnslated» в зависимости от входного сигнала. Там должно быть 2 входа, не больше и не меньше. НапримерMSSQL nvarchar IF PROCEDURE exec с входом nvarchar

CREATE PROCEDURE Translate_Orig (@Orig nvarchar(32),@Translated nvarchar(32)) 
AS 
BEGIN 
UPDATE Dictionary 
IF EXISTS (SELECT * FROM Dictionary WHERE [email protected]) 
SET Dictionary.[email protected] 
ELSE INSERT INTO Dictionary VALUES (@Orig, @Translated); 
END 
GO 

SET @Orig = N'Orig' 
SET @Translated = N'traslated' 
EXEC Translate_Orig (@Orig,@Translated); 

ответ

1
CREATE PROCEDURE Translate_Orig (@Orig nvarchar(32),@Translated nvarchar(32)) 
AS 
BEGIN 

     IF EXISTS (SELECT * FROM Dictionary WHERE [email protected]) 
     BEGIN 
      UPDATE Dictionary 
      SET [email protected] 
     END 
     ELSE INSERT INTO Dictionary VALUES (@Orig, @Translated); 
END 
GO 


SET @Orig = N'Orig' 
SET @Translated = N'traslated' 
EXEC Translate_Orig (@Orig,@Translated); 
+0

Извините, но я не могу выполнить там Msg 102, Level 15, State 1, Line 1 Неправильный синтаксис возле 'Orig'. – user2377214

+0

Неверный синтаксис рядом с '@Orig' все еще существует. 1. В любом случае, спасибо. Из-за моей репутации я не могу голосовать. – user2377214

0

Убедитесь, что вы просто запустив CREATE PROCEDURE через GO как заявление.

+0

Это правильный код – user2377214

0

There EXEC, который работает отлично. При этом квадратные скобки. И «SET [email protected] WHERE Dictionary.Orig = @ Orig "

CREATE PROCEDURE Translate_Orig (@Orig nvarchar(32),@Translated nvarchar(32)) 
AS 
BEGIN 
IF EXISTS (SELECT * FROM Dictionary WHERE [email protected]) 
BEGIN 
UPDATE Dictionary 
SET [email protected] WHERE [email protected] 
END 
ELSE INSERT INTO Dictionary VALUES (@Orig, @Translated); 
END 
GO 

DECLARE @Orig nvarchar(32); 
DECLARE @Translated nvarchar(32); 
SET @Orig = N'Name' 
SET @Translated = N'Name_Translated' 

EXEC Translate_Orig @Orig,@Translated; 
+0

Рабочее решение – user2377214

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