首页 > 解决方案 > 如何修复,操作系统返回错误 '0xc0000033(Object Name invalid.)',试图在 FILESTREAM 数据库中插入图像数据

问题描述

我创建了一个带有 FILESTREAM 文件组的数据库以及一个用于存储图像的表。尝试插入数据时...

USE Images
GO
INSERT INTO ReceivedImages (ReceiveID, ImageData, URowID)
VALUES (23, CAST('My image data' AS varbinary(max)), NEWID())
GO

我收到以下错误消息:

操作系统在“E:\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\TPImages\fdfbf99c-3b4b-4a03-87ae-15b3086639c8\345191cc”上尝试“NtCreateFile”时返回错误“0xc0000033(对象名称无效。)” -a1d2-4db3-8e69-5da238c7e641\00000025-00000302-0003'。

如果您知道如何解决此问题,请发布您的答案。谢谢!

我的开发环境:Windows Server 2016 Standard vm,16Gb RAM,64 位。SqlServer 2019 (15.0.2080)。

用于创建数据库和表的脚本如下...

USE [master]
GO
-- Get the SQL Server data path.
DECLARE @data_path nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
      FROM master.sys.master_files
      WHERE database_id = 1 AND file_id = 1);

 -- Execute the CREATE DATABASE statement.
EXECUTE ('CREATE DATABASE Images
ON PRIMARY
    (
    NAME = Images_data
    ,FILENAME = ''' + @data_path + 'Images_data.mdf''
    ,SIZE = 7MB
    ,MAXSIZE = 2750MB
    ,FILEGROWTH = 10%
    ),
FILEGROUP FSTPImages CONTAINS FILESTREAM
    (
      NAME = TPIMAGES
      , FILENAME = ''' + @data_path + '\TPImages''
      , MAXSIZE = 10000 MB
        -- SIZE and FILEGROWTH should not be specified here.
        -- If they are specified an error will be raised.
     )
LOG ON
    (
    NAME = Images_log
    ,FILENAME = ''' + @data_path + 'Images_log.ldf''
    ,SIZE = 5MB
    ,MAXSIZE = 25MB
    ,FILEGROWTH = 5MB
    )'
);
GO

ALTER DATABASE [Images] SET AUTO_SHRINK ON 
GO

USE [Images]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

DROP TABLE IF EXISTS dbo.ReceivedImages
GO

CREATE TABLE [dbo].[ReceivedImages] (
    ImageID BIGINT IDENTITY(6999, 1) NOT NULL
, ReceiveID INT NOT NULL
, ExpiryDate DATETIME NOT NULL CONSTRAINT [DF_ReceivedImages_ExpiryDate] DEFAULT(DATEADD(d, 32, CURRENT_TIMESTAMP))
, ImageData VARBINARY(MAX) FILESTREAM NULL
, URowID UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL CONSTRAINT [UX_ReceivedImages_URowID] UNIQUE WITH FILLFACTOR = 70 --must have indexed rowguidcol to accompany FILESTREAM column.
, CONSTRAINT [PK_ReceivedImages] PRIMARY KEY NONCLUSTERED 
    (ImageID DESC) 
    WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
)
GO

DROP INDEX IF EXISTS [IX_ReceivedImages_ReceiveID_Incl_ImageData] ON [dbo].[ReceivedImages]
GO
CREATE CLUSTERED INDEX [IX_ReceivedImages_ReceiveID] ON [dbo].[ReceivedImages]
([ReceiveID] ASC)
WITH (ONLINE = OFF, PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
DROP INDEX IF EXISTS [IX_ReceivedImages_ExpiryDate] ON [dbo].[ReceivedImages]
GO
CREATE NONCLUSTERED INDEX [IX_ReceivedImages_ExpiryDate] ON [dbo].[ReceivedImages]
([ExpiryDate]) 
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO

ALTER AUTHORIZATION ON [dbo].[ReceivedImages] TO  SCHEMA OWNER 
GO

标签: sql-servertsql

解决方案


推荐阅读