Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Tento článek popisuje, jak používat Transact-SQL INSERTUPDATE, a DELETE příkazy ke správě dat FILESTREAM.
Poznámka:
Příklady v tomto článku vyžadují databázi a tabulku s podporou FILESTREAM, které jsou vytvořeny v části Vytvoření databáze FILESTREAM-Enabled a vytvoření tabulky pro ukládání dat FILESTREAM.
Vložení řádku obsahujícího data FILESTREAM
Pokud chcete přidat řádek do tabulky, která podporuje data FILESTREAM, použijte příkaz Transact-SQL INSERT . Při vkládání dat do sloupce FILESTREAM můžete vložit hodnotu NULL nebo varbinary(max).
Vložit hodnotu NULL
Následující příklad ukazuje, jak vložit NULL. Pokud je NULLhodnota FILESTREAM , databázový stroj nevytvoří soubor v systému souborů.
INSERT INTO Archive.dbo.Records
VALUES (NEWID(), 1, NULL);
GO
Vložení záznamu nulové délky
Následující příklad ukazuje, jak použít INSERT k vytvoření záznamu nulové délky. To je užitečné, když chcete získat popisovač souboru, ale budete s ním manipulovat pomocí rozhraní Win32 API.
INSERT INTO Archive.dbo.Records
VALUES (NEWID(), 2,
CAST ('' AS VARBINARY(MAX)));
GO
Vytvoření datového souboru
Následující příklad ukazuje, jak použít INSERT k vytvoření souboru, který obsahuje data. Databázový stroj převede řetězec Seismic Data na varbinary(max) hodnotu. FileSTREAM vytvoří soubor Systému Windows, pokud ještě neexistuje. Data se pak přidají do datového souboru.
INSERT INTO Archive.dbo.Records
VALUES (NEWID(), 3,
CAST ('Seismic Data' AS VARBINARY(MAX)));
GO
Když vyberete všechna data z Archive.dbo.Records tabulky, výsledky se podobají výsledkům zobrazeným v následující tabulce.
Id Sloupec ale bude obsahovat jiné identifikátory GUID.
| ID | Sériové číslo | Graf |
|---|---|---|
C871B90F-D25E-47B3-A560-7CC0CA405DAC |
1 |
NULL |
F8F5C314-0559-4927-8FA9-1535EE0BDF50 |
2 |
0x |
7F680840-B7A4-45D4-8CD5-527C44D35B3F |
3 |
0x536569736D69632044617461 |
Aktualizace dat FILESTREAM
Data v systému souborů můžete aktualizovat pomocí Transact-SQL, ale při streamování velkých objemů dat do souboru možná nebudete chtít.
Následující příklad nahradí veškerý text v záznamu souboru textem Xray 1.
UPDATE Archive.dbo.Records
SET [Chart] = CAST('Xray 1' AS VARBINARY(MAX))
WHERE [SerialNumber] = 2;
Odstranění dat FILESTREAM
Když odstraníte řádek obsahující pole FILESTREAM, odstraníte také jeho základní soubory systému souborů. Jediným způsobem, jak odstranit řádek, a proto soubor, je použít příkaz Transact-SQL DELETE .
Následující příklad ukazuje, jak odstranit řádek a jeho přidružené soubory systému souborů.
DELETE Archive.dbo.Records
WHERE SerialNumber = 1;
GO
Když vyberete všechna data z Archive.dbo.Records tabulky, řádek zmizí a přidružený soubor už nebudete moct používat.
Poznámka:
Podkladové soubory jsou odstraněny modulem pro uvolňování nevyužívaných dat FILESTREAM.
Kontrola, jestli tabulka nebo databáze obsahuje data FILESTREAM
Pokud chcete zjistit, jestli databáze nebo tabulka obsahuje data FILESTREAM, musíte se dotazovat na systémová zobrazení.
Následující rozšířený příklad ukazuje postup vytvoření nové databáze, vytvoření tabulek, které mají data FILESTREAM, a zobrazení systému dotazů, abyste viděli, zda tabulky a samotná databáze obsahují data FILESTREAM.
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';