Sql server 为什么要打开文本图像并将表设置为FileStream

Sql server 为什么要打开文本图像并将表设置为FileStream,sql-server,sql-server-2014,Sql Server,Sql Server 2014,我有一个关于现有SQL Server 2014数据库的表,如下所示: CREATE TABLE [dbo].[Files]( [Id] [int] IDENTITY(1,1) NOT NULL, [Content] [varbinary](max) NULL, [Created] [datetime2](7) NOT NULL, [Flag] [nvarchar](100) NULL, [Key] [uniqueidentifier] NOT NULL, [MimeTyp

我有一个关于现有SQL Server 2014数据库的表,如下所示:

CREATE TABLE [dbo].[Files](
  [Id] [int] IDENTITY(1,1) NOT NULL,
  [Content] [varbinary](max) NULL,
  [Created] [datetime2](7) NOT NULL,
  [Flag] [nvarchar](100) NULL,
  [Key] [uniqueidentifier] NOT NULL,
  [MimeType] [nvarchar](400) NOT NULL,
  [Name] [nvarchar](400) NULL,
  [Pack] [uniqueidentifier] NOT NULL,
  [Slug] [nvarchar](400) NULL,
  [Updated] [datetime2](7) NOT NULL,
CONSTRAINT [PK_File] PRIMARY KEY CLUSTERED 
(
  [Id] ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
什么是TEXTIMAGE_?为什么不只是[主]

如何更改此表以使用FileStream?因此,它将:

[Key] uniqueidentifier rowguidcol not null
    constraint DF_File_Key default newid()
    constraint UQ_File_Key unique ([Key]),  

更新

我有以下TSQL:

exec sp_configure filestream_access_level, 2
reconfigure

alter table dbo.Files 
    set (filestream_on = 'default')

alter table dbo.Files
    alter column [Key] add rowguidcol;

alter table dbo.Files
   alter column Content filestream;

alter table dbo.Files
   add constraint DF__File__Content default (0x),
       constraint DF__File__Key default newid(),
       constraint UQ__File__Key unique ([Key]); 

go 
但当我运行它时,我得到了错误: “表”约束定义的语法不正确

我使用“default”是因为我想使用默认文件组

我错过了什么?

来自:

适用于:SQL Server 2008至SQL Server 2016。
指定存储FILESTREAM数据的位置。
只有当表没有FILESTREAM列时,使用SET FILESTREAM_ON子句的ALTER TABLE才会成功。可以使用第二条ALTER TABLE语句添加FILESTREAM列。

默认情况下,上的
TEXTIMAGE_用于具有大列(nvarchar(max)、varbinary(max)等)的表,如前所述:
如果表中没有大值列,则不允许使用
TEXTIMAGE\u-ON。如果已指定,则无法指定TEXTIMAGE\u-ON。如果为“默认”指定,或者如果根本没有指定TEXTIMAGE_ON,则大值列存储在默认文件组中。在创建表中指定的任何大值列数据的存储随后都无法更改。

来自:

适用于:SQL Server 2008至SQL Server 2016。
指定存储FILESTREAM数据的位置。
只有当表没有FILESTREAM列时,使用SET FILESTREAM_ON子句的ALTER TABLE才会成功。可以使用第二条ALTER TABLE语句添加FILESTREAM列。

默认情况下,
上的
TEXTIMAGE_用于具有大列(nvarchar(max)、varbinary(max)等)的表,如前所述:

如果表中没有大值列,则不允许使用
TEXTIMAGE\u-ON。如果已指定,则无法指定TEXTIMAGE\u-ON。如果为“默认”指定,或者如果根本没有指定TEXTIMAGE_ON,则大值列存储在默认文件组中。创建表中指定的任何大值列数据的存储随后都无法更改。

我刚刚将我的T-SQL添加到问题更新中。。。但是我犯了一个错误。知道为什么吗?如果您的错误是:
Default FILESTREAM filegroup在数据库中不可用
edit(对于SQL Server 2014:),那么您应该运行:
EXEC sys.sp\u configure N'FILESTREAM access level',N'2'go
否则在此处发布错误消息。我想您的意思是level=2?我更新了我的问题,但它已经在2。在重新配置之后,我一直有那个错误。除了我发布的错误外,没有其他内容。值为:0表示禁用,1表示仅T-SQL,2表示windows流媒体和T-SQL。您应该在主数据库中执行上述查询,然后运行重新配置,重新启动SQL Server服务,您应该会表现良好。我刚刚将我的T-SQL添加到问题更新中。。。但是我犯了一个错误。知道为什么吗?如果您的错误是:
Default FILESTREAM filegroup在数据库中不可用
edit(对于SQL Server 2014:),那么您应该运行:
EXEC sys.sp\u configure N'FILESTREAM access level',N'2'go
否则在此处发布错误消息。我想您的意思是level=2?我更新了我的问题,但它已经在2。在重新配置之后,我一直有那个错误。除了我发布的错误外,没有其他内容。值为:0表示禁用,1表示仅T-SQL,2表示windows流媒体和T-SQL。您应该在主数据库中执行上述查询,然后运行“重新配置”,重新启动SQL Server服务,这样您就可以正常工作了。
exec sp_configure filestream_access_level, 2
reconfigure

alter table dbo.Files 
    set (filestream_on = 'default')

alter table dbo.Files
    alter column [Key] add rowguidcol;

alter table dbo.Files
   alter column Content filestream;

alter table dbo.Files
   add constraint DF__File__Content default (0x),
       constraint DF__File__Key default newid(),
       constraint UQ__File__Key unique ([Key]); 

go 
SET ( FILESTREAM_ON = { partition_scheme_name | filestream_filegroup_name | "default" | "NULL" } )