2010-07-16 3 views
1

Здравствуйте, я новичок в создании хранимой процедуры, вы можете мне помочь, как это сделать. Ошибка: Неправильный синтаксис рядом с ключевым словом «AS». Должен объявить скалярную переменную @Serial.Как бороться со хранимой процедурой?

CREATE PROCEDURE sp_SIU 
    -- Add the parameters for the stored procedure here 
    @Serial varchar(50), 
    @Part varchar(50), 
    @Status varchar(50), 
AS 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    /*SET NOCOUNT ON;*/ 

    -- Insert statements for procedure here 
    --where in my form if i enter serial number it will show select values 
    Select SerialNumber,PartNumber,Status from Table1 where SerialNUmber = @Serial 

    --Then if is correct it will Update Status on combobox 

     Update Table1 SET 
       [email protected] 
       where [email protected] 

    --then Insert Serial Number,Parnumber to Table 2 

     DECLARE @Count int 
    select @Count = Count(SerialNumber) from Table1 WHERE SerialNumber = @Serial 

    IF @Count = 0 
     BEGIN 
       INSERT INTO Table2 (SerialNumber,PArtNumber) 
       VALUES 
       (@Serial, @Part) 
     END 
     RETURN @Count 

    RETURN 

Edit: Перемещенные обновление информация размещена в ответ на вопрос

К сожалению, мой пост не такой промах. Можно присоединиться к этой 3-строчной строке в одной хранимой процедуре?

Сценарий: { Что я должен делать в форме, что я будет ввести серийный номер txtserial.text с помощью выбора SQL он будет показывать serialnumber,partnumber и status на lblserial.text,lblpartnumber.text и lblstatus.text. И я буду сравнивать:

txtserial.text == lblserial.text 
txtpartnumber.text == lblpartnumber.text 

для моего обработчика ошибок.

{ 
Select SerialNumber,PartNumber,Status from Table1 where SerialNUmber = @Serial 
} 

Тогда, если они равны, то: Я буду обновлять свой статус от cbostatus.text, если последовательный и часть правильно, то использовать SQL upate.

{ 
Update Table1 SET 
       [email protected], 
       [email protected], 
       [email protected] 

       where [email protected] 
} 


Then insert serialnumber, using sql insert to another table. 
{ 
INSERT INTO Table2 (SerialNumber,DateCreated,Createdby) 
       VALUES 
       (@Serial,@date,@username) 
} 

что-то похожее. «)

+1

@SerialNumber Откуда это? – iBiryukov

+0

После вашего обновления вопроса вы не можете смешивать свое приложение и рабочий процесс с хранимой процедурой, но я все еще не совсем понимаю, что вы делаете. У вас уже есть часть выбора? –

ответ

0

К сожалению, мой пост - это не пропустите.

Можно присоединиться к этой 3-строчной строке в одной хранимой процедуре?

Сценарий:

Что я должен делать в форме, что я войду серийный номер txtserial.text с помощью выбора SQL он будет показывать SERIALNUMBER, партномер и статус на lblserial.text, lblpartnumber.text и lblstatus.text.

Andi Сравним:

  • txtserial.text == lblserial.text
  • txtpartnumber.text == lblpartnumber.text

для моего обработчика ошибок.

{ 
Select SerialNumber,PartNumber,Status from Table1 where SerialNUmber = @Serial 
} 

Тогда, если они равны, то:

Я буду обновлять свой статус от cbostatus.text, если последовательный и часть правильно, то использовать SQL обновления.

{ 
    Update Table1 
    SET Status = @Status, 
     Modifiedby = @username, 
     DateModified = @Date 
    where SerialNumber = @Serial 
} 

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

{ 
    INSERT INTO Table2(SerialNumber, DateCreated, Createdby) 
       VALUES(@Serial, @date, @username) 
} 

что-то вроде этого.

7

Вы изгоев запятой здесь

@Status varchar(50), 
AS 

и имя кренится между @Serial и @SerialNumber являются они предназначены для 2 различных параметров?

Кроме того, какова цель этой линии?

Select SerialNumber,PartNumber,Status from Table1 where SerialNUmber = @Serial 

В настоящее время он просто отправит обратно результат вызова из 3 столбцов в вызывающее приложение. что то, что он намерен делать (похоже, это не соответствует следующему комментарию, который, по-видимому, подразумевает, что он должен быть какой-то проверкой)?

1

Да, вы можете выполнить 3 оператора SQL внутри одной хранимой процедуры. Вы, вероятно, хотите, чтобы объявить некоторые локальные переменные внутри sproc для хранения промежуточных результатов, т.е.

CREATE PROCEDURE BLAHBLAH 
@SerialNumber VarChar(50) 
AS 
BEGIN 
DECLARE @partnumber varchar(50); 
SELECT @partnumber = partnumber FROM Table WHERE serialnumber = @SerialNumber; 
... 
SELECT @partnumber; --- return as recordset 
RETURN @partnumber; --- return as return value 
END 

Затем вы можете позже вставить @partnumber, тест @partnumber, возвращение @partnumber и т.д. Я не совсем понимаю, что вы хотеть сделать; похоже, что вы в основном хотите найти партию на основе серийного номера, но вы также хотите сделать некоторые тесты на уникальность. Это поможет, если вы сможете прояснить цель немного больше.

Я рекомендую вам игнорировать материал пользовательского интерфейса на данный момент. Напишите себе несколько хороших чистых хранимых процедур, которые инкапсулируют транзакцию и будут делать правильные вещи, даже если они будут запускаться одновременно из двух разных соединений. Получите все, что удовлетворит вашу среду SQL. Затем вернитесь к пользовательскому интерфейсу.

+0

Хорошо, сэр. Я буду следовать вашим советам .. Я изучаю n-level и sql, поэтому у меня есть еще много вопросов, чтобы обратиться за помощью. Я просто добавлю обновления, если я тоже это сделаю. – Crimsonland

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