Dosyaları FileTable'lara yükleme

Şunlar için geçerlidir: SQL Server

Dosyaları FileTable'lara yüklemeyi veya geçirmeyi açıklar.

Dosyaları FileTable'a yükleme veya geçirme

Dosyaları bir FileTable'a yüklemek veya geçirmek için seçtiğiniz yöntem, dosyaların şu anda nerede depolandığına bağlıdır.

Dosyaların geçerli konumu Geçiş seçenekleri
Dosyalar şu anda dosya sisteminde depolanır.

SQL Server dosyalar hakkında bilgi sahibi değildir.
FileTable, Windows dosya sisteminde klasör olarak göründüğünden, dosyaları taşımak veya kopyalamak için kullanılabilir yöntemlerden herhangi birini kullanarak dosyaları kolayca yeni bir FileTable'a yükleyebilirsiniz. Bu yöntemler arasında Windows Gezgini, xcopy ve robocopy gibi komut satırı seçenekleri ve özel betikler veya uygulamalar bulunur.

Mevcut bir klasörü FileTable'a dönüştüremezsiniz.
Dosyalar şu anda dosya sisteminde depolanır.

SQL Server, dosyaların işaretçilerini içeren bir meta veri tablosu içerir.
İlk adım, yukarıda belirtilen yöntemlerden birini kullanarak dosyaları taşımak veya kopyalamaktır.

İkinci adım, mevcut meta veri tablosunu dosyaların yeni konumuna işaret eden şekilde güncelleştirmektir.

Daha fazla bilgi için bu makalenin Örnek: Dosya sisteminden FileTable'a dosya geçirme bölümüne bakın.

Nasıl yapılır: Dosyaları FileTable'a yükleme

Dosyaları bir FileTable'a yüklemek için aşağıdaki yöntemleri kullanabilirsiniz:

  • Dosyaları kaynak klasörlerden Windows Gezgini'ndeki yeni FileTable klasörüne sürükleyip bırakın.

  • Komut isteminden ya da bir toplu iş dosyasında veya komut dosyasında move, copy, xcopy ya da robocopy gibi komut satırı seçeneklerini kullanın.

  • Dosyaları C# veya Visual Basic .NET taşımak veya kopyalamak için özel bir uygulama yazın. System.IO ad uzayındaki yöntemleri çağırın.

Örnek: Dosyaları dosya sisteminden FileTable'a geçirme

Bu senaryoda, dosyalarınız dosya sisteminde depolanır ve SQL Server'da dosyalara yönelik işaretçiler içeren bir meta veri tablonuz vardır. Dosyaları bir FileTable içine taşımak ve ardından meta verilerinde yer alan her dosya için orijinal UNC yolunu FileTable UNC yolu ile değiştirmek istiyorsunuz. GetPathLocator işlevi bu hedefe ulaşmanıza yardımcı olur.

Bu örnekte, fotoğraflar hakkındaki verileri içeren bir veritabanı tablosu PhotoMetadataolduğunu varsayalım. Bu tabloda, dosyanın gerçek UNC yolunu içeren UNCPath türünde bir sütun .jpg vardır.

Görüntü dosyalarını dosya sisteminden FileTable'a geçirmek için aşağıdaki işlemi yapmanız gerekir:

  1. Dosyaları tutmak için yeni bir FileTable oluşturun. Bu örnekte tablo adı kullanılır, dbo.PhotoTableancak tabloyu oluşturmak için kullanılan kod gösterilmez.

  2. Dosyaları dizin yapısıyla FileTable'ın kök dizinine kopyalamak için .jpg veya benzer bir araç kullanın.

  3. Aşağıdaki örneğe benzer bir kod kullanarak tablodaki PhotoMetadata meta verileri düzeltin:

--  Add a path locator column to the PhotoMetadata table.
ALTER TABLE PhotoMetadata ADD pathlocator HIERARCHYID;

-- Get the root path of the Photo directory on the File Server.
DECLARE @UNCPathRoot VARCHAR(100) = '\\RemoteShare\Photographs';

-- Get the root path of the FileTable.
DECLARE @FileTableRoot VARCHAR(1000);

SELECT @FileTableRoot = FileTableRootPath('dbo.PhotoTable');

-- Update the PhotoMetadata table.
-- Replace the File Server UNC path with the FileTable path.
UPDATE PhotoMetadata
SET UNCPath = REPLACE(UNCPath, @UNCPathRoot, @FileTableRoot);

-- Update the pathlocator column to contain the pathlocator IDs from the FileTable.
UPDATE PhotoMetadata
SET pathlocator = GetPathLocator(UNCPath);

Dosyaları FileTable'a toplu yükleme

FileTable, toplu işlemler için normal bir tablo gibi davranır. FileTable, dosya ve dizin ad alanının bütünlüğünün korunmasını sağlayan sistem tanımlı kısıtlamalara sahiptir. Bu kısıtlamaların FileTable'a yüklenen veri toplu verilerinde doğrulanması gerekir. Bazı toplu ekleme işlemleri tablo kısıtlamalarının göz ardı edilmesine izin verdiğinden, aşağıdaki gereksinimler zorunlu tutulur.

  • Kısıtlamaları zorlayan toplu yükleme işlemleri, diğer tüm tablolarda olduğu gibi bir FileTable üzerinde çalıştırılabilir. Bu kategori aşağıdaki işlemleri içerir:

    • bcp ile CHECK_CONSTRAINTS yan tümcesi.
    • BULK INSERT ile CHECK_CONSTRAINTS yan tümcesi.
    • INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...), IGNORE_CONSTRAINTS yan cümlesi olmadan.
  • FileTable sistem tanımlı kısıtlamalar devre dışı bırakılmadığı sürece kısıtlamaları zorlamayan toplu yükleme işlemleri başarısız olur. Bu kategori aşağıdaki işlemleri içerir:

    • yan tümce içermeyen bcpCHECK_CONSTRAINTS
    • BULK INSERT, CHECK_CONSTRAINTS yan tümcesi olmadan.
    • INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...) ile IGNORE_CONSTRAINTS yan tümcesi.

Nasıl yapılır: Dosyaları FileTable'a toplu yükleme

Dosyaları bir FileTable'a toplu yüklemek için çeşitli yöntemler kullanabilirsiniz:

CHECK_CONSTRAINTS yan tümcesiyle çağırın.

FileTable ad alanını devre dışı bırakın ve CHECK_CONSTRAINTS ifadesi olmadan çağırın. Ardından FileTable ad alanını yeniden etkinleştirin.

FileTable kısıtlamalarını devre dışı bırakma hakkında bilgi için bkz. FileTable'ları Yönetme.

Nasıl Yapılır: Toplu yükleme için FileTable kısıtlamalarını devre dışı bırakma

Sistem tanımlı kısıtlamaları uygulama yükü olmadan dosyaları bir FileTable'a toplu yüklemek için kısıtlamaları geçici olarak devre dışı bırakabilirsiniz. Daha fazla bilgi için bkz. FileTable'ları Yönetme.