Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Ez a cikk bemutatja, hogyan használható az Transact-SQL INSERT, UPDATE és DELETE utasítás a FILESTREAM-adatok kezelésére.
Megjegyzés:
A cikkben szereplő példákhoz szükség van a FILESTREAM-kompatibilis adatbázisra és -táblára, amely az FILESTREAM-Enabled-adatbázis létrehozása és a FILESTREAM-adatok tárolására szolgáló tábla létrehozásakor jön létre.
FILESTREAM-adatokat tartalmazó sor beszúrása
Ha sorokat szeretne hozzáadni a FILESTREAM-adatokat támogató táblához, használja az Transact-SQL INSERT utasítást. Amikor adatokat szúr be EGY FILESTREAM oszlopba, beszúrhat NULL vagy varbinary(max) értéket.
NULL beszúrása
Az alábbi példa bemutatja, hogyan szúrhat be NULL. Ha a FILESTREAM értéke, NULLaz adatbázismotor nem hoz létre fájlt a fájlrendszerben.
INSERT INTO Archive.dbo.Records
VALUES (NEWID(), 1, NULL);
GO
Nulla hosszúságú rekord beszúrása
Az alábbi példa bemutatja, hogyan hozhat INSERT létre nulla hosszúságú rekordot. Ez akkor hasznos, ha egy fájlleírót szeretne beszerezni, de Win32 API-k használatával fogja módosítani a fájlt.
INSERT INTO Archive.dbo.Records
VALUES (NEWID(), 2,
CAST ('' AS VARBINARY(MAX)));
GO
Adatfájl létrehozása
Az alábbi példa bemutatja, hogyan hozhat INSERT létre adatokat tartalmazó fájlt. Az adatbázismotor a sztringet Seismic Datavarbinary(max) értékké alakítja. A FILESTREAM létrehozza a Windows-fájlt, ha még nem létezik. Az adatok ezután hozzá lesznek adva az adatfájlhoz.
INSERT INTO Archive.dbo.Records
VALUES (NEWID(), 3,
CAST ('Seismic Data' AS VARBINARY(MAX)));
GO
Ha az összes adatot kiválasztja a Archive.dbo.Records táblából, az eredmények hasonlóak lesznek az alábbi táblázatban látható eredményekhez. Az Id oszlop azonban különböző GRAFIKUS GUID-ket fog tartalmazni.
| azonosító | SerialNumber | Grafikon |
|---|---|---|
C871B90F-D25E-47B3-A560-7CC0CA405DAC |
1 |
NULL |
F8F5C314-0559-4927-8FA9-1535EE0BDF50 |
2 |
0x |
7F680840-B7A4-45D4-8CD5-527C44D35B3F |
3 |
0x536569736D69632044617461 |
FILESTREAM-adatok frissítése
A Transact-SQL használatával frissítheti a fájlrendszerfájlban lévő adatokat, de előfordulhat, hogy nem szeretné, ha nagy mennyiségű adatot streamelne egy fájlba.
Az alábbi példa a fájlrekordban lévő szövegeket a Xray 1szövegre cseréli.
UPDATE Archive.dbo.Records
SET [Chart] = CAST('Xray 1' AS VARBINARY(MAX))
WHERE [SerialNumber] = 2;
FILESTREAM-adatok törlése
A FILESTREAM mezőt tartalmazó sor törlésekor a mögöttes fájlrendszerfájlokat is törli. Egy sor, és így a fájl törlésének egyetlen módja a Transact-SQL DELETE utasítás használata.
Az alábbi példa bemutatja, hogyan törölhet egy sort és a hozzá tartozó fájlrendszerfájlokat.
DELETE Archive.dbo.Records
WHERE SerialNumber = 1;
GO
Ha az összes adatot kijelöli a Archive.dbo.Records táblából, a sor eltűnik, és már nem használhatja a társított fájlt.
Megjegyzés:
A mögöttes fájlokat a FILESTREAM szemétgyűjtő eltávolítja.
Annak ellenőrzése, hogy egy tábla vagy adatbázis TARTALMAZ-e FILESTREAM-adatokat
Annak megállapításához, hogy egy adatbázis vagy tábla TARTALMAZ-e FILESTREAM-adatokat, le kell kérdeznie a rendszernézeteket.
Az alábbi bővített példa bemutatja az új adatbázis létrehozásának lépéseit, a FILESTREAM-adatokat tartalmazó táblák létrehozását, valamint a rendszernézetek lekérdezését annak ellenőrzésére, hogy a táblák és maga az adatbázis IS TARTALMAZ-e FILESTREAM-adatokat.
USE [master];
GO
-- Create database with FILESTREAM
CREATE DATABASE [FileStreamTest] CONTAINMENT = NONE ON PRIMARY (
NAME = N'FileStreamTest'
, FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\FileStreamTest.mdf'
, SIZE = 204800 KB
, MAXSIZE = UNLIMITED
, FILEGROWTH = 65536 KB
)
, FILEGROUP [FileStreamFG] CONTAINS FILESTREAM DEFAULT(NAME = N'FileStreamTestFStream', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\FileStreamTestFStream', MAXSIZE = UNLIMITED) LOG ON (
NAME = N'FileStreamTest_log'
, FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\FileStreamTest_log.ldf'
, SIZE = 270336 KB
, MAXSIZE = 2048 GB
, FILEGROWTH = 65536 KB
)
WITH CATALOG_COLLATION = DATABASE_DEFAULT;
GO
USE [FileStreamTest];
GO
CREATE TABLE FSTiffs (
Guid UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE DEFAULT NEWSEQUENTIALID()
, DocumentID INT NOT NULL
, DocumentType VARCHAR(10) NOT NULL
, FileContent VARBINARY(MAX) FILESTREAM NOT NULL
, DateInserted DATETIME
);
-- Which database and files use FILESTREAM
SELECT db_name(database_id) dbname
, name AS file_name
, physical_name
, type_desc
, *
FROM sys.master_files
WHERE type_desc = 'FILESTREAM';
-- Which tables in the database have FILESTREAM enabled
USE [FileStreamTest]
GO
SELECT *
FROM sys.tables
WHERE filestream_data_space_id IS NOT NULL;
--insert a TIFF file
INSERT INTO FSTiffs (
DocumentID
, DocumentType
, FileContent
, DateInserted
)
SELECT 101
, '.tiff'
, *
, GETDATE()
FROM OPENROWSET(BULK N'C:\Temp\Sample1.tiff', SINGLE_BLOB) rs;
-- Select data from FILESTREAM table
SELECT *
FROM FSTiffs;
-- Update a document
UPDATE FSTiffs
SET FileContent = (
SELECT *
FROM OPENROWSET(BULK N'C:\Temp\Sample2.tiff', SINGLE_BLOB) AS rs
)
WHERE DocumentID = 101;
-- Delete a document
DELETE FSTiffs
WHERE DocumentID = 101;
--clean up any delete files
EXEC sp_filestream_force_garbage_collection @dbname = N'FileStreamTest'
, @filename = N'FileStreamTestFStream';