2016-07-07 9 views
1

Ich verwende Microsoft SQL Server Management Studio.Wie SUM zu ändern, um jeden Zeileneintrag auf einen neuen Wert zu ändern?

Ich möchte jede Zeile meines Datensatzes (sagen wir Spalte ID) mit einem konstanten Wert (sagen 50).

So, hier ist ein besseres Bild:

Click here for the image that i prepared for better understanding of my requirement.

Ich weiß SUM verwendet werden kann, um die gesamte Spalte zu summieren und kam mit einem TOTAL am Ende der Reihe, aber wie wäre es jede Zugabe Datensatz der Reihe mit einem konstanten Wert?

Sobald die Summe fertig ist, muss ich meinen letzten Schritt tun, nämlich die ID der nächsten neuen Zeile (die nicht wie oben SUMME benötigt) von 154 auf 999 zurückzusetzen. Kann mir jemand auch raten beim Zurücksetzen des Primärschlüssels?

+4

Ich denke, Sie suchen nach '+'. –

+0

[Primärschlüssel ändern] (https://msdn.microsoft.com/en-us/library/ms189251.aspx) –

+0

Was ist mit dem Tag [tag: sas]? Ist das zufällig, oder geht das eigentlich in SAS? – Joe

Antwort

1

Dick,

Sie die leicht durch DBCC CheckIdent command Ausführung nächsten Wert Identitätsspalte ändern

Leider gibt es keine einfache Möglichkeit, um eine Identitätsspalte Wert zu aktualisieren. Bei vorhandenen Datensätzen habe ich bisher alle Daten in eine neue temporäre Tabelle kopiert und Werte für diese Hilfstabelle organisiert. Dann bestehende Tabelle löschen. Im folgenden Schritt benennen Sie die temporäre Tabelle in den ursprünglichen Tabellennamen um.

Wenn Sie versuchen, IDENTITY einer Spalte zu entfernen, erzeugt die SSMS ein Skript wie folgt

BEGIN TRANSACTION 
SET QUOTED_IDENTIFIER ON 
SET ARITHABORT ON 
SET NUMERIC_ROUNDABORT OFF 
SET CONCAT_NULL_YIELDS_NULL ON 
SET ANSI_NULLS ON 
SET ANSI_PADDING ON 
SET ANSI_WARNINGS ON 
COMMIT 
BEGIN TRANSACTION 
GO 
CREATE TABLE dbo.Tmp_MyTable 
    (
    id int NOT NULL, 
    value int NULL 
    ) ON [PRIMARY] 
GO 
ALTER TABLE dbo.Tmp_MyTable SET (LOCK_ESCALATION = TABLE) 
GO 
IF EXISTS(SELECT * FROM dbo.MyTable) 
    EXEC('INSERT INTO dbo.Tmp_MyTable (id, value) 
     SELECT id, value FROM dbo.MyTable WITH (HOLDLOCK TABLOCKX)') 
GO 
DROP TABLE dbo.MyTable 
GO 
EXECUTE sp_rename N'dbo.Tmp_MyTable', N'MyTable', 'OBJECT' 
GO 
COMMIT 

Ich weiß, dass dies nicht eine einfache Möglichkeit, klingt Identitätsspaltenwerte zu aktualisieren.