En mi situación, hay una posibilidad de una secuencia de comandos se ejecuta muchas veces (no me pregunten por qué).

Así que me quiero hacer de mi script de prueba de la bala antes de que se ejecuta en prod.

Tengo un gran cambio donde puedo agregar FILESTREAM capacidades. Ya he conseguido que funcione en mi entorno dev con las secuencias de comandos necesarios mediante la habilitación de FILESTREAM, la alteración de la base de datos para agregar un grupo de archivos filestream, y, a continuación, agregar una ubicación de archivo para el archivo de grupo, y por último la creación de una tabla con filestream en la columna de datos (varbinary(MAX)).

Que está todo bien. Pero la ejecución de la instrucción ALTER DATABASE script muchas veces se pueden producir errores si un grupo de archivos que ya está allí. Así que hice esto…

IF NOT EXISTS (SELECT * FROM sys.filegroups WHERE [name]='NewFileGroup')
    BEGIN
        ALTER DATABASE [MyDb]
        ADD FILEGROUP [NewFileGroup] CONTAINS FILESTREAM
    END 
GO

Pero la siguiente parte del código es la parte que no quiero correr muchas veces…

DECLARE @Path NVARCHAR(MAX)
SET @Path = (SELECT REPLACE(filename, 'MyDb.mdf', 'NewFileGroup') FROM sysfiles WHERE Name = 'PrimaryFileName')

DECLARE @SQL NVARCHAR(max)

SET @SQL = 
'ALTER DATABASE [MyDb]
ADD FILE
  (NAME = ''NewFileGroup''
   , FILENAME = ' + QuoteName( @Path, '''' ) 
            + ')
TO FILEGROUP [NewFileGroup]'

EXEC(@SQL)

Que el código funciona bien, pero ¿cómo puedo comprobar si el nombre de archivo /ruta de archivo ya existe en el archivo de grupo? Por favor someobody ayuda. Sólo quiero hacer otra declaración de si a su alrededor.

InformationsquelleAutor Issa Fram | 2011-04-18

2 Comentarios

  1. 4

    Para ver si usted tiene ya un grupo de archivos FILESTREAM para buscar en sys.data_spaces:

    select * from sys.data_spaces where type='FD';

    Para ver si el grupo de archivos tiene cualquier archivo de FILESTREAM ya look es sys.database_files:

    select * from sys.database_files where type = 2;

    Lo que haces, no no se basan en el objeto nombres.

    • ¿Por qué no confiar en los nombres si yo soy la definición de ellos?
    • Si usted no está seguro de que los grupos de archivos que están ahí o no, entonces, ¿cómo puede usted estar seguro de que la base de datos está habilitada para filestream o no? DBA agrega un grupo de archivos habilitado para filstream llamado foo, su aplicación viene y trata de añadir sus propios…
    • Im haciendo todos los scripts que otro equipo (mi departamento) se ejecuta en la base de datos….a veces se ejecutan fuera de orden y/o ejecutar varias veces… solo estoy tratando de poner controles para asegurarse de que los errores no se muestran por todo el lugar
  2. 1

    O de SQL Server 2012 y por encima de esta consulta se mostrará una lista de todas las bases de datos que tienen los no-transaccional habilitado el acceso a ellos, yo.e, FileStream.

    SELECT DB_NAME(database_id) [DB_Name],directory_name [FileStream_DirectoryName]
        FROM  sys.database_filestream_options
        WHERE non_transacted_access != 0;    

    Se refieren a http://msdn.microsoft.com/en-us/library/gg492071.aspx para obtener más información

Dejar respuesta

Please enter your comment!
Please enter your name here