Ich habe eine ID-Spalte in dieser Ansicht, aber es springt von 40.000 auf 7.000.000. Ich möchte nicht, dass meine verrückte gespeicherte Prozedur eine Schleife ausführt, bis sie 7.000.000 erreicht, also habe ich mich gefragt, ob ich eine Spalte erstellen könnte, die die Zeilennummer war. Es wäre ein Ausdruck irgendeiner Art, aber ich weiß nicht, wie ich es machen soll. Bitte helfen! Vielen Dank im Voraus.Ist es möglich, eine Ausdrucksspalte in einer Ansicht zu erstellen, um die Zeilennummer anzuzeigen?
Ist es möglich, eine Ausdrucksspalte in einer Ansicht zu erstellen, um die Zeilennummer anzuzeigen?
Antwort
Relationale Tabellen haben keine Zeilennummern. Sie können eine Zeilennummer in ein Ergebnis projizieren, indem Sie die integrierte Funktion ROW_NUMBER() OVER (ORDER BY ...)
verwenden.
Ihr Verfahren hat viele, viele Probleme. Es verwendet loop @counter als Suchschlüssel (!!!). Es wird die Schlüsselstabilität zwischen den Iterationen vorausgesetzt (z. B. wird angenommen, dass @ counter + 1 der nächste Schlüssel ist, wobei alle möglichen Einfügungen/Löschungen ignoriert werden). Es nimmt Stabilität innerhalb der Schleife an (keine Transaktionen, kein Sperren, um die Gültigkeit von EXISTS zu gewährleisten).
Versuchen Sie, einen Keyset-Cursor zu emulieren. Verwenden Sie einfach einen Keyset-Cursor.
Sie sollten wirklich tun, was Sie mit Updates tun, nicht Schleifen. Aber wenn Sie darauf bestehen ...
declare @ID int
declare @LastID int
select @LastID = 0
while (1 = 1)
begin
select @ID = min(Id)
from [vCategoryClaimsData]
where Id > @LastID
-- if no ID found then we've reached the end of the table
if @ID is null break
-- look up the data for @ID
SELECT @claim_Number = dbo.[vCategoryClaimsData].[Claim No],
...
where Id = @LastID
-- do your processing here
...
-- set @LastID to the ID you just processed
select @LastID = @ID
end
Stellen Sie sicher, dass die ID-Spalte indiziert ist. Dies ermöglicht das Überspringen der nicht sequentiellen Id-Werte.
Es sieht so aus, als ob die Verarbeitung, die Sie tun, mit Update-Anweisungen behandelt werden könnte. Das wäre viel effizienter und beseitigt viele der Probleme, die andere aufgeworfen haben.
Wenn Sie können, versuchen Sie, die gespeicherte Prozedur neu zu schreiben, um Sätze im Vergleich zu zeilenbasierter Verarbeitung zu verwenden.
Um zu tun, was Sie brauchen, verwenden Sie die ROW_NUMBER-Funktion. Um dies zu tun, habe ich unten einen Beispielcode zur Verfügung gestellt.
USE tempdb
GO
IF OBJECT_ID('tempdb.dbo.IDRownumbersView') IS NOT NULL
DROP VIEW5 dbo.IDRownumbersView
IF OBJECT_ID('tempdb.dbo.IDRownumbersTable') IS NOT NULL
DROP TABLE dbo.IDRownumbersTable
CREATE TABLE dbo.IDRownumbersTable
(
RowID int PRIMARY KEY CLUSTERED
,CharValue varchar(5)
,DateValue datetime
)
INSERT INTO IDRownumbersTable VALUES (10, 'A', GETDATE())
INSERT INTO IDRownumbersTable VALUES (20, 'B', GETDATE())
INSERT INTO IDRownumbersTable VALUES (30, 'C', GETDATE())
INSERT INTO IDRownumbersTable VALUES (40, 'D', GETDATE())
INSERT INTO IDRownumbersTable VALUES (50, 'E', GETDATE())
INSERT INTO IDRownumbersTable VALUES (100, 'F', GETDATE())
INSERT INTO IDRownumbersTable VALUES (110, 'G', GETDATE())
INSERT INTO IDRownumbersTable VALUES (120, 'H', GETDATE())
GO
CREATE VIEW dbo.IDRownumbersView
AS
SELECT ROW_NUMBER() OVER (ORDER BY RowID ASC) AS RowNumber
,RowID
,CharValue
,DateValue
FROM dbo.IDRownumbersTable
GO
SELECT * FROM dbo.IDRownumbersView
- 1. Ist es möglich, einen Screenshot einer Ansicht zu erstellen, ohne die Ansicht anzuzeigen?
- 2. Ist es möglich, eine Unteransicht einer Ansicht durch Ziehen in eine andere Ansicht zu verschieben?
- 3. Ist es möglich, die FASM-Präprozessorausgabe anzuzeigen?
- 4. Ist es möglich, eine ListViewGroup zu erstellen
- 5. Joomla: Ist es möglich, eine Ansicht einer Komponente ohne iframe und plugin anzuzeigen?
- 6. Ist es in iOS möglich, ein Modell/eine Ansicht zu erstellen und eine zweite Ansicht zu erstellen, die die erste Ansicht automatisch auf dem zweiten Bildschirm repliziert?
- 7. Ist es möglich eine Kategorieseite in Magento zu erstellen?
- 8. Ist es möglich, Zellen in einer Datagrid-Ansicht zu verschmelzen
- 9. Ist es möglich, den Verlauf einer Zeile in SVN anzuzeigen?
- 10. Ist es möglich, Java zu verwenden, um dll zu erstellen?
- 11. Ist es möglich, den Fortschritt einer Sortierung in Linux anzuzeigen?
- 12. Ist es möglich, die Ansicht eines Fragments
- 13. Ist es möglich, in VB.NET eine gemeinsame Datenbankklasse zu erstellen?
- 14. ist es möglich, eine Google Earth-Karte INSIDE Excel anzuzeigen?
- 15. UIPageViewController Animation um anzuzeigen, Swipe ist möglich
- 16. Ist es möglich, eine Eigenschaft in Javascript zu erstellen?
- 17. Ist es möglich, einen SFSafariViewController in einem UITabBarController anzuzeigen?
- 18. Ist es möglich, zwei Vorlagen in einer einzigen Ansicht von verschiedenen Modulen anzuzeigen?
- 19. Ist es möglich, ein Geräte-Hardwareprofil zu erstellen, um eine äquivalente AVD zu erstellen?
- 20. Ist es möglich, eine Nachricht in einem leeren Datagrid anzuzeigen
- 21. Ist es möglich, eine Linux-Box mit distcc zu erstellen, um meine XCode-Projekte zu erstellen?
- 22. Ist es möglich, Bild mit LoadDataWithBaseURL() -Methode in Android anzuzeigen?
- 23. ist es möglich, eine Liste in unserer App zu erstellen?
- 24. Ist es möglich, eine Bildbibliothek in iTextsharp zu erstellen?
- 25. Ist es möglich, transparente Leinwand zu erstellen
- 26. Ist es möglich, Ansichten ohne XML in Android zu erstellen?
- 27. Ist es möglich, eine Excel-Datei unter Linux anzuzeigen
- 28. ist es möglich, in Visual Studio Online eine Grafik zu generieren, um die Beiträge der Programmierer anzuzeigen?
- 29. Ist es möglich, Einschränkungen von einer Ansicht in eine andere zu kopieren?
- 30. Ist es möglich, eine verknüpfte Chekbox zu erstellen?
, die Code-Block Mist einfügen nicht – Marlon
funktioniert es funktioniert gut. – skaffman
danke. jetzt hilfe meh pls lol. – Marlon