Таблица обновлений в хранимой процедуре с несколькими объединениями - PullRequest
0 голосов
/ 03 декабря 2018

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

USE [Productivity]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[ProjectsBySite]
(
@idsite int
)
AS  
    SELECT l.FirstName, l.LastName,s.SiteName, p.ProjectName, p.StartDate, 
           p.EndDate, pz.SavingsDate, pz.PlannedSavings,pz.ActualSavings
    FROM ((((pt_Site as s
    inner join pt_ProjectsSites as ps on s.IDSite = ps.Site_id)
    inner join pt_Projects as p on ps.Project_id = p.IDProjects)
    inner join pt_ProjectSavings as pz on p.IDProjects = pz.Project_id)
    inner join pt_Personnel as l on p.Personnel_id = l.IDPersonnel)
    WHERE IDSite = @idsite
RETURN

Я хотел бы использовать этот же запрос для ОБНОВЛЕНИЯ поля ActualSavings в таблице pt_ProjectSavings.

Вот что я пробовал, но когда я выполняю,процедура ничего не возвращает.Может кто-нибудь сказать мне, что я делаю неправильно?

USE [Productivity]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[UpdateSavings]
(
@idsite int
)
AS
BEGIN
    SET NOCOUNT ON;
    UPDATE pz
    SET Project_id = 1  
        FROM ((((pt_Site as s
        inner join pt_ProjectsSites as ps on s.IDSite = ps.Site_id)
        inner join pt_Projects as p on ps.Project_id = p.IDProjects)
        inner join pt_ProjectSavings as pz on p.IDProjects = pz.Project_id)
        inner join pt_Personnel as l on p.Personnel_id = l.IDPersonnel)
        WHERE IDSite = @idsite
END

Я уверен, что это больше, чем одна вещь, и я знаю, что мне нужно добавить SELECT:

SELECT l.FirstName, l.LastName,s.SiteName, p.ProjectName, p.StartDate, 
       p.EndDate, pz.SavingsDate, pz.PlannedSavings,pz.ActualSavings

Я простоне могу понять, получить синтаксис.

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Если я понимаю, что вы имеете в виду, и вы хотите обновить таблицу после выбора определенных записей, и вы используете SSMS (что является большим количеством предположений), если это так, попробуйте следующее: Щелкните правой кнопкой мыши натаблицу и выберите Редактировать Top 200 строк.Это покажет вам стол.Затем в верхнем левом углу нажмите кнопку SQL, которая выглядит как прикрепленное изображение.Это откроет окно запроса, которое показывает выбор.Если вы замените исходный выбор на ваш запрос выбора (не обновление, а только оператор выбора), вы получите результаты и сможете редактировать строки под ним.Я надеюсь это имеет смысл.Судя по тому, что вы спрашиваете, кажется, что вы хотите отредактировать саму таблицу.Если вы хотите, чтобы системный оператор обновления работал, вам понадобится файл или какой-либо другой ввод через веб-страницу или форму для захвата значения и передачи его в SQL для обновления.Это не похоже на то, что вы делаете здесь.Соблюдайте осторожность, это живое обновление для реального стола.Все внесенные вами изменения являются постоянными.

SQL Button to Edit Table

0 голосов
/ 03 декабря 2018

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

CREATE PROCEDURE [dbo].[UpdateSavings]
(
@idsite int
)
AS
BEGIN
    SET NOCOUNT ON;
    UPDATE pz
    SET Project_id = 1  
        FROM ((((pt_Site as s
        inner join pt_ProjectsSites as ps on s.IDSite = ps.Site_id)
        inner join pt_Projects as p on ps.Project_id = p.IDProjects)
        inner join pt_ProjectSavings as pz on p.IDProjects = pz.Project_id)
        inner join pt_Personnel as l on p.Personnel_id = l.IDPersonnel)
        WHERE IDSite = @idsite

--then select your data
 SELECT l.FirstName, l.LastName,s.SiteName, p.ProjectName, p.StartDate, 
       p.EndDate, pz.SavingsDate, pz.PlannedSavings,pz.ActualSavings
FROM ((((pt_Site as s
inner join pt_ProjectsSites as ps on s.IDSite = ps.Site_id)
inner join pt_Projects as p on ps.Project_id = p.IDProjects)
inner join pt_ProjectSavings as pz on p.IDProjects = pz.Project_id)
inner join pt_Personnel as l on p.Personnel_id = l.IDPersonnel)
WHERE IDSite = @idsite
END

однако, если вы просто хотите подтвердить, что данные были обновлены или нет , вы можете использовать @@ ROWCOUNT просто используйте select @@ ROWCOUNT в конце, и вы не получите ни одной строки, затронутой в базе данных.

...