SORU
26 Mayıs 2009, Salı


Eşdeğer Oracle'In Rowıd SQL Server

SQL Server, Oracle Rowıd eşdeğer nedir?

CEVAP
24 EYLÜL 2011, CUMARTESİ


From the Oracle docs

ROWID Pseudocolumn

Veritabanında her satır için ROWID pseudocolumn döner satır adresi. Oracle Veritabanı rowıd değerleri bilgi içerir gerekli bir satır bulmak için:

  • Veri nesne numarası nesne
  • Hangi satırda bulunan veri dosyası veri bloğu
  • Veri bloğu (ilk satır 0) satır konumu
  • Satır bulunduğu veri dosyası (ilk dosya 1). Dosya sayı tablo göredir.

SQL Server bu en yakın eşdeğer 5 ** üç bileşeni var rid.

SQL Server 2008, bu belgelenmemiş ve desteklenmeyen %%physloc%% sanal sütun kullanmak mümkündür. Bu ilk dört bayt Sayfa NUMARASI ile binary(8) değerini döndürür, sonra da 2 Dosya KİMLİĞİ, sayfasında yuvası konumu için 2 bayt bayt izledi.

Bu skaler sys.fn_PhysLocFormatter fonksiyonu veya sys.fn_PhysLocCracker TVF daha okunabilir bir form haline dönüştürmek için kullanılabilir

CREATE TABLE T(X INT);

INSERT INTO T VALUES(1),(2)

SELECT %%physloc%% AS [%%physloc%%],
       sys.fn_PhysLocFormatter(%%physloc%%) AS [File:Page:Slot]
FROM T

Örnek Çıktı

 -------------------- ---------------- 
|    %%physloc%%     | File:Page:Slot |
 -------------------- ---------------- 
| 0x2926020001000000 | (1:140841:0)   |
| 0x2926020001000100 | (1:140841:1)   |
 -------------------- ---------------- 

Bu sorgu işlemcisi tarafından değil kaldıraçlı olduğunu unutmayın. EderkenmümkünWHERE bir madde bu kullanmak için

SELECT *
FROM T
WHERE %%physloc%% = 0x2926020001000100 

SQL Server olacakdeğildoğrudan belirtilen satır için isteyin. Bunun yerine tarama, her satır için %%physloc%% değerlendirmek ve eşleşen bir dönüş tam bir tablo varsa (Eğer yoksa).

Bu işlemi daha önce de belirttiğim 2 işlevleri tarafından yürütülen ve ters binary(8) değeri Bilinen Dosya,Sayfa karşılık almak için,Yuva değerleri altında kullanılabilir.

DECLARE @FileId int = 1,
        @PageId int = 338,
        @Slot   int = 3

SELECT CAST(REVERSE(CAST(@PageId AS BINARY(4))) AS BINARY(4))  
       CAST(REVERSE(CAST(@FileId AS BINARY(2))) AS BINARY(2))  
       CAST(REVERSE(CAST(@Slot   AS BINARY(2))) AS BINARY(2))

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Joseph Herscher

    Joseph Hersc

    14 Mart 2007
  • K-391

    K-391

    23 EKİM 2012
  • TheOtherMau5

    TheOtherMau5

    6 Mart 2012