日期:2014-05-16  浏览次数:20575 次

Sqlserver数据库
怎么能够控制sql server数据库在做Update操作的时候不管匹配几条数据,而update的时候只能更新一条,怎么控制呢?
------解决方案--------------------
top 1??
------解决方案--------------------
引用:
top是针对于select而言的,我做的操作是Update,而我在做update操作的时候我不知道要怎么去控制update的条数,求解,谢谢,

update 也可以TOP 啊,DELETE也可以,不知是SELECT
------解决方案--------------------
引用:
top是针对于select而言的,我做的操作是Update,而我在做update操作的时候我不知道要怎么去控制update的条数,求解,谢谢,


控制Update的影响行数,肯定是跟WHERE条件有关系,你只要保证WHERE后的条件只能匹配到一条语句不就完事,
举个例子

跟句主键ID更新

UPDATE T1 WHERE ID IN (SELECT TOP 1 ID FROM T2)

保证条件匹配到的记录只有一条
------解决方案--------------------
谁说top只能用在select的?
------解决方案--------------------
要是2005及以上版本,还可以用row_number
------解决方案--------------------
----------------------------------------------------------------
-- Author  :DBA_HuangZJ(发粪涂墙)
-- Date    :2014-05-07 16:56:47
-- Version:
--      Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) 
-- Apr  2 2010 15:48:46 
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据[huang]
if object_id('[huang]') is not null drop table [huang]
go 
create table [huang]([id] int,[name] nvarchar(2),[value] int)
insert [huang]
select 1,'a',1 union all
select 2,'a',2 union all
select 3,'b',3
--------------生成数据--------------------------

select * from [huang]

;WITH cte AS (SELECT name,value,ROW_NUMBER()OVER(PARTITION BY name ORDER BY id)New_id FROM huang )
UPDATE cte 
SET value=value+1024
WHERE New_id=1

SELECT * FROM huang
----------------结果----------------------------
/* 
id          name value
----------- ---- -----------
1           a    1
2           a    2
3           b    3

(3 row(s) affected)

(2 row(s) affected)

id          name value
----------- ---- -----------
1           a    1025
2           a    2
3           b    1027

*/