tsql: может ли «возврат выбрать» предшествовать «обновлению»? - PullRequest
1 голос
/ 23 октября 2011

Я хочу написать хранимую процедуру t-sql (aka sproc), которая выбирает 3 столбца из MyTable. Кроме того, я хочу обновить таблицу в том же sproc:

  1. Я выбираю третье значение из таблицы.
  2. Если оно равно 'true', я хочу обновить соответствующую запись в таблице до 'false'

Я не был уверен, какой синтаксис мне использовать. Не могли бы вы помочь мне?

ALTER procedure [dbo].[My_PROC]
    @ID varchar(10)
AS
BEGIN

    declare @Col3 bit;

    set @Col3 = select Col3
    from dbo.MyTable  with (nolock)
    where @ID = ID


    if @Col3 = 'true'  
        update dbo.dbo.MyTable set col3 = 'false'
        where @ID = ID

    select Col1, 
    Col2, 
    Col3
    from dbo.MyTable table  with (nolock) where @ID = ID,
    table.Col1,
    table.Col2,
    @Col3   
END

edit: я хочу вернуть оригинал Col3 (не обновленное значение).

Ответы [ 2 ]

1 голос
/ 23 октября 2011

Использование:

ALTER procedure [dbo].[My_PROC]
    @ID varchar(10)
AS
BEGIN

    SELECT t.col1, 
           t.col2, 
           t.col3
      FROM dbo.MyTable AS t WITH (NOLOCK)
     WHERE t.id = @ID

    -- No need for an IF statement to determine updating...
    UPDATE dbo.dbo.MyTable 
       SET col3 = 'false'
     WHERE id = @ID
       AND t.col3 = 'true'

END

Я не знаю, что вы собираетесь сделать в финале SELECT, но я могу обновить его, как только пойму, что вы намеревались.

0 голосов
/ 24 октября 2011

Если вы используете SQL Server 2005 или более позднюю версию, вы можете использовать предложение OUTPUT для вывода исходного значения, если оно фактически было обновлено запросом.Однако OUTPUT не выдаст вам исходное значение, если строка не была обновлена ​​запросом.

    declare @t table (
      ID int,
      tf bit
    );

    insert into @t values
      (1,0),
      (2,1),
      (3,0);

    declare @ID int = 2;

    select * from @t

    update @t set
      tf = 0
    output deleted.ID, deleted.tf
    where ID = @ID;

    select * from @t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...