Vorrei aggiornare le prime 400 righe in una tabella di database. Lo pseudo SQL è sotto, come posso fare questo?Come AGGIORNARE TOP 400?
UPDATE top (400) db.dbo.tbl
SET column1 = 2
WHERE column2 = 1
AND column1 is null
Vorrei aggiornare le prime 400 righe in una tabella di database. Lo pseudo SQL è sotto, come posso fare questo?Come AGGIORNARE TOP 400?
UPDATE top (400) db.dbo.tbl
SET column1 = 2
WHERE column2 = 1
AND column1 is null
Come si determina il 400 superiore? Senza ordine, non c'è garanzia che lo stesso insieme sia sempre selezionato e quindi i record errati potrebbero essere aggiornati.
UPDATE db.dbo.tbl SET column1 = 2 WHERE
primaryID IN (
SELECT TOP (400) primarkyID FROM db.dbo.tbl
WHERE column2 = 1 AND column1 IS NULL
)
Ma non mi piace questo come non c'è alcun modo per garantire CHE top 400, si potrebbe desiderare di aggiungere qualche altro tipo di criteri. E persino un ordine dalla subquery.
Probabilmente siete alla ricerca di qualcosa di simile:
update db.dbo.tbl set column1 = 2
where ID in (
select top 400 ID from db.dbo.tbl
where column2 = 1 and column1 is null --the criteria have been moved here
order by ID --order by clause recommended
)
dove ID è la colonna chiave primaria della tabella.
Puoi anche usare 'imposta rowcount 400' invece di usare' TOP' nella query vedi http: // msdn .microsoft.com/it-it/library/ms188774.aspx – pjp
Tranne che SET ROWCOUNT è deprecato. –
@Dave: sei sicuro? Non riesco a vederlo documentato nei documenti MSDN http://msdn.microsoft.com/en-us/library/ms188774.aspx – pjp
Se si utilizza SQL Server 2008, la sintassi "top n" funzionerà con le istruzioni di eliminazione e aggiornamento. In caso contrario, gli altri metodi elencati qui dove si identificano le chiavi primarie in una sottoquery o in una tabella derivata funzioneranno correttamente. E come altri hanno fatto, l'ordine per "è altamente raccomandato o le righe che si aggiornano possono differire da una query alla successiva.
Funziona anche su SQL 2005, ma richiede le parentesi: TOP (n). Vedere SQL 2005 BOL, istruzione UPDATE, clausola TOP(). – Rick
WITH q AS
(
SELECT TOP 400 *
FROM db.dbo.tb
WHERE column2 = 1
AND column1 is null
ORDER BY
column3 -- choose your order!
)
UPDATE q
SET column2 = 2
@Quassnoi, solo curioso, qual è il vantaggio di usare un CTE invece di una sottoselezione? –
'@ jmgant': non è possibile aggiornare una sottoselezione come in' Oracle', 'UPDATE (SELECT TOP 400 * ...) SET ...' fallirà. Una condizione 'IN' proposta da altri risulta in un' JOIN' aggiuntivo che è ridondante qui. – Quassnoi
Inoltre, funzionerà anche se non hai un "PRIMARY KEY" o hai un composito 'PRIMARY KEY' (in' SQL Server', non puoi usare più di una colonna in un predicato 'IN') – Quassnoi
È possibile utilizzare seguente sintassi
superiore UPDATE (400) TBL colonna1 SET = '2' DOVE Column2 = '1' E column1 è nullo
veda questo post http://balasingam.com/sql-server/update-top-n-record-in-sql-server/comment-page-1#comment-227
Qual è la domanda? – RaYell
Suppongo che tu stia utilizzando SqlServer. È corretto? Nota anche la risposta di HLGEM, non vi è alcuna garanzia che si ottenga lo stesso set di risultati ogni volta che si esegue questa query, a meno che non si disponga di un ordine. –
retagged, per fare questo dovresti usare SQL Server come nessun altro popolare DBMS ha una dichiarazione simile a TOP 400 – tekiegreg