Sql 在一个存储过程中选择并更新
我有一个select存储过程,我正在尝试使它成为它所带来的结果,它也会更新一个名为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
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