Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在一个存储过程中选择并更新_Sql_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

Sql 在一个存储过程中选择并更新

Sql 在一个存储过程中选择并更新,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有一个select存储过程,我正在尝试使它成为它所带来的结果,它也会更新一个名为download的列,并将这些行标记为downloads 例如,我下拉10行,这10行我还想在同一个存储过程中将Downloaded列更新为true。这可能吗 到目前为止,这是我的sp,它会提取数据 ALTER PROCEDURE [dbo].[GetLeads] @DateTo datetime = null, @DateFrom datetime = null AS SELECT name

我有一个select存储过程,我正在尝试使它成为它所带来的结果,它也会更新一个名为
download
的列,并将这些行标记为downloads

例如,我下拉10行,这10行我还想在同一个存储过程中将
Downloaded
列更新为true。这可能吗

到目前为止,这是我的sp,它会提取数据

ALTER PROCEDURE [dbo].[GetLeads]
@DateTo datetime = null,
@DateFrom datetime = null
AS
    SELECT name
         , lastname
         , title
         , company
         , address
         , address2
         , city
         , [state]
         , zip
         , country
         , stamptime

    FROM
        lead
    where
         ((@DateTo is null AND @DateFrom IS null) or (stamptime BETWEEN @DateTo AND @DateFrom))

谢谢

继续vulkanino的评论回答,类似这样:

ALTER PROCEDURE [dbo].[GetLeads]
@DateTo datetime = null,
@DateFrom datetime = null
AS
    UPDATE  
        lead 
    SET     
        Downloaded = 1 
    WHERE   
        ((@DateTo is null AND @DateFrom IS null) or (stamptime BETWEEN @DateTo AND @DateFrom))

    SELECT name
         , lastname
         , title
         , company
         , address
         , address2
         , city
         , [state]
         , zip
         , country
         , stamptime

    FROM
        lead
    where
         ((@DateTo is null AND @DateFrom IS null) or (stamptime BETWEEN @DateTo AND @DateFrom))

您只需
输出
更新的行

UPDATE lead
  SET Downloaded = 1
OUTPUT INSERTED.* 
  WHERE ((@DateTo is null AND @DateFrom IS null) or (stamptime BETWEEN @DateTo AND @DateFrom))

此更新,然后在单个语句中返回更新的行。

您最好在更新时使用输出语句

DECLARE@attreable
(
名称
,姓
标题
,公司
,地址
,地址二
城市
,陈述
,拉链
,国家
,口吃时间
)
更新
设置a.下载=1
将Inserted.name、Inserted.lastname、Inserted.title等输出到@tentable
从a组开始
其中(@DateTo为NULL,@DateFrom为NULL)或(a.stamptime介于@DateTo和@DateFrom之间))
从@tentable中选择*

也许我没有回答这个问题,但是
更新lead SET Downloaded=TRUE,其中(@DateTo为null,@DateFrom为null)或(stamptime介于@DateTo和@DateFrom之间))
?我将此解决方案与DELETED.*一起使用(而不是INSERTED.*)返回原始字段值,即应用更新之前的值。
DECLARE @TEMPTABLE
(
    name <type>
    , lastname <type>
    , title <type>
    , company <type>
    , address <type>
    , address2 <type>
    , city <type>
    , state <type>
    , zip <type>
    , country <type>
    , stamptime <type>
)

UPDATE a
SET a.Downloaded = 1
OUTPUT Inserted.name, Inserted.lastname, Inserted.title, etc. INTO @TEMPTABLE
FROM lead a
WHERE ((@DateTo IS NULL AND @DateFrom IS NULL) OR (a.stamptime BETWEEN @DateTo AND @DateFrom))

SELECT * FROM @TEMPTABLE