2014-09-05 13 views
6

Ho una tabella in cui un campo utilizza filestream. Se mi fate clic destro e creare una creare la tabella T-SQL è:Crea tabella genera un errore

USE [CMMS] 
GO 

/****** Object: Table [dbo].[Ficheros] Script Date: 05/09/2014 12:48:48 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [dbo].[Ficheros](
    [IDFichero] [uniqueidentifier] ROWGUIDCOL NOT NULL, 
    [IDDocumento] [bigint] NOT NULL, 
    [Fichero] [varbinary](max) FILESTREAM NULL, 
CONSTRAINT [PK_Ficheros] PRIMARY KEY CLUSTERED 
(
    [IDFichero] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] FILESTREAM_ON [FILESTREAM_CMMS_DATA], 
CONSTRAINT [IX_Ficheros] UNIQUE NONCLUSTERED 
(
    [IDDocumento] 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] FILESTREAM_ON [FILESTREAM_CMMS_DATA] 

GO 

SET ANSI_PADDING OFF 
GO 

ALTER TABLE [dbo].[Ficheros] ADD CONSTRAINT [DF_Ficheros_IDFichero] DEFAULT (newid()) FOR [IDFichero] 
GO 

ALTER TABLE [dbo].[Ficheros] WITH CHECK ADD CONSTRAINT [FK_Ficheros_Documentos] FOREIGN KEY([IDDocumento]) 
REFERENCES [dbo].[Documentos] ([IDDocumento]) 
ON DELETE CASCADE 
GO 

ALTER TABLE [dbo].[Ficheros] CHECK CONSTRAINT [FK_Ficheros_Documentos] 
GO 

Quando si elimina la tabella e utilizzare lo script ottengo questo errore:

Mens. 1709, Nivel 16, Estado 1, Línea 2 
No se puede usar TEXTIMAGE_ON cuando una tabla no tiene columnas de tipo text, ntext, image, varchar(max), nvarchar(max), distintas de FILESTREAM varbinary(max), xml o CLR grande. 
Mens. 4902, Nivel 16, Estado 1, Línea 2 
No se encuentra el objeto "dbo.Ficheros" porque no existe o no tiene permisos. 
Mens. 4902, Nivel 16, Estado 1, Línea 2 
No se encuentra el objeto "dbo.Ficheros" porque no existe o no tiene permisos. 
Mens. 4902, Nivel 16, Estado 1, Línea 2 
No se encuentra el objeto "dbo.Ficheros" porque no existe o no tiene permisos. 

L'applicazione funziona benissimo, l'accesso ai il database e può aggiungere file e ottenerlo, ma non so perché lo script sia errato.

Grazie.

risposta

10

Il flag TEXTIMAGE_ON viene utilizzato per specificare che qualsiasi colonna di testo o immagine deve essere memorizzata in un filegroup diverso nel resto della tabella.

Poiché non ci sono colonne di testo o immagine nella tabella [dbo]. [Ficheros], questo flag non può essere utilizzato e genera l'errore. Provare a rimuovere la bandiera TEXTIMAGE_ON dalla linea finale della CREATE TABLE, in modo che si legge come questo:

) ON [PRIMARY] FILESTREAM_ON [FILESTREAM_CMMS_DATA] 
+1

Certo sarebbe bello se questo non causare un errore, o almeno avere la possibilità di non averlo causare un errore, esp. dal momento che SQL ha generato uno script con esso in primo luogo! – Dave