В моей ситуации существует возможность многократного запуска сценария (не спрашивайте почему).
Итак, я хочу сделать свой сценарий пуленепробиваемым, прежде чем он запустится в prod.
У меня довольно большое изменение, когда я добавляю возможности FILESTREAM. Я уже заставил его работать в моей среде разработки с необходимыми сценариями, включив FILESTREAM, изменив базу данных для добавления файловой группы файлового потока, а затем добавив местоположение файла в эту файловую группу и, наконец, создав таблицу с файловым потоком на данных столбец (varbinary (MAX)).
Это все хорошо. Но многократный запуск сценария ALTER DATABASE может привести к ошибкам, если файловая группа уже существует. Итак, я сделал это ...
IF NOT EXISTS (SELECT * FROM sys.filegroups WHERE [name]='NewFileGroup')
BEGIN
ALTER DATABASE [MyDb]
ADD FILEGROUP [NewFileGroup] CONTAINS FILESTREAM
END
GO
Но следующая часть кода - это та часть, которую я не хочу запускать много раз ...
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)
Этот код работает нормально, но как я могу проверить, существует ли путь FILENAME / file в этой файловой группе? Пожалуйста, помогите кому-нибудь. Я просто хочу сделать еще одно заявление об этом.