2014-12-02 2 views
0

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

create procedure U_DIS_UpdateProject 
(
@projectID CHAR(4), 
@projectName varchar(50), 
@firmName varchar(50), 
@fundedbudget decimal(16,2), 
@startDate date, 
@status varchar(25), 
@projectTypeCode char(5), 
@projectManager char(8) 
) as 
begin 
UPDATE Project 
SET 
projectName =ISNULL(@projectName,projectName), 
firmName =ISNULL(@firmName,firmName), 
fundedbudget =ISNULL(@fundedbudget,fundedbudget), 
startDate =ISNULL(@startDate,startDate), 
status =ISNULL(@status,status), 
projectTypeCode =ISNULL(@projectTypeCode,projectTypeCode), 
projectManager =ISNULL(@projectManager,projectManager) 
WHERE @projectID=projectID 

конец пойти

EXEC U_DIS_UpdateProject @projectID = 'A003', @projectName = 'Le Chateau', @firmName = идут

+0

Вы уверены, что вам нужно установить все параметры? Я не думаю, что вам нужно. Вы должны иметь возможность просто обновлять projectd, projectName, firmName без указания других столбцов. – Stc5097

+0

SQL - это стандарт, который реализует большинство СУБД. SQL Server - продукт Microsoft RDBMS. – Allan

ответ

0

я бы просто использовать операторы CASE, 'Готэм Restaurants' чтобы проверить каждый. Это похоже на то, что у вас есть в вашем примере, но это также поймает пустые строки.

create procedure U_DIS_UpdateProject 
(
@projectID CHAR(4), 
@projectName varchar(50), 
@firmName varchar(50), 
@fundedbudget decimal(16,2), 
@startDate date, 
@status varchar(25), 
@projectTypeCode char(5), 
@projectManager char(8) 
) as 
begin 
UPDATE Project 
SET 
projectName = 
     (CASE 
      WHEN ISNULL(@projectName,'')='' THEN projectName 
      ELSE @projectName 
     END), 
firmName = 
     (CASE 
      WHEN ISNULL(@firmName,'')='' THEN firmName 
      ELSE @firmName 
     END), 
fundedbudget = 
    (CASE 
      WHEN ISNULL(@fundedbudget,'')='' THEN fundedbudget 
      ELSE @fundedbudget 
     END), 
startDate = 
    (CASE 
      WHEN ISNULL(@startDate,'')='' THEN startDate 
      ELSE @startDate 
     END), 
status = 
    (CASE 
      WHEN ISNULL(@status,'')='' THEN [status] 
      ELSE @status 
     END), 
projectTypeCode = 
    (CASE 
      WHEN ISNULL(@projectTypeCode,'')='' THEN projectTypeCode 
      ELSE @projectTypeCode 
     END), 
projectManager = 
    (CASE 
      WHEN ISNULL(@projectManager,'')='' THEN projectManager 
      ELSE @projectManager 
     END) 
WHERE @projectID=projectID 
+0

Вам не нужно передавать все параметры, однако, если вы решите это сделать, использование параметров по умолчанию или проверка значений, как описано выше, было бы разумным. http://technet.microsoft.com/en-us/library/ms189330(v=SQL.105).aspx – CodeX

+0

Как написать инструкцию обновления, если все параметры не будут переданы? – april4181

+0

Непонимайте вопрос april, но инструкция обновления не требует, чтобы каждый столбец в таблице был установлен [Try It Yourself] (http://www.w3schools.com/SQl/sql_update.asp), и если вам это нужно, динамический, который его обновляет, вы должны написать «красный» код или dynmaic sql, чтобы построить инструкцию update и вызвать строку с помощью инструкции execute. см. динамический sql в разделе процедуры [здесь] (http://www.sqlteam.com/article/introduction-to-dynamic-sql-part-1) – CodeX

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

  • Нет связанных вопросов^_^