Я создал хранимую процедуру с VB.NET
Эта процедура идет на удаленный сервер (на данный момент на моем ближайшем сервере Win 2003)
до сих пор все в порядке
Процедура создана, и я звоню ей из моей программы
Имя: sp_AddStreamDB
mycommand = new sqlcommand("EXEC sp_AddStreamDB 'C:\sqlDATA\', 'RemoteDB'",RemoteSQLConn)
myCommand.ExecuteNonQuery()
Обычно процедура принимает два параметра, и она помещает их туда, где нужно выполнить, но это не происходит
CREATE PROCEDURE [dbo].[sp_AddStreamDB] (
-- Add the parameters for the stored procedure here
@DPath varchar(max)
,@DBName varchar(50)
,@Qchar varchar(1) = "'"
)
AS
BEGIN_TRY:
SET QUOTED_IDENTIFIER ON ;
SET NOCOUNT ON ;
-- Insert statements for procedure here
DECLARE @ErrMsg nvarchar(4000)
,@DBName1 varchar(50)
,@DBName2 varchar(50)
,@DBNamefs varchar(50)
,@DBNamelog varchar(50)
,@FileGroupN varchar(100)
,@DATName varchar(max)
,@LOGName varchar(max)
,@FSName varchar(max)
SET @DBName1 = ( @DBName + '1' )
SET @DBName2 = ( @DBName + '2' )
SET @DBNamefs = ( @DBName + 'fs' )
SET @DBNamelog = ( @DBName + 'log' )
SET @FileGroupN = ( @DBname + 'StreamGroup' )
SET @DATName = ( @Qchar + @DPath + @DBName + '_dat.mdf' + @Qchar )
SET @LOGName = ( @Qchar + @DPath + @DBName + '_log.ldf' + @Qchar )
SET @FSName = ( @Qchar + @DPath + @DBName + '_fs' + @Qchar )
BEGIN_CATCH:
SELECT ERROR_MESSAGE() AS ErrorMessage ;
SELECT @ErrMsg = ERROR_MESSAGE()
CREATE DATABASE DBName
ON PRIMARY
(
NAME = DBName1
,FILENAME = DATName
),
FILEGROUP FileGroupN CONTAINS FILESTREAM
(
NAME = DBNamefs
,FILENAME = FSName
)
LOG ON
(
NAME = DBNamelog
,FILENAME = LOGName
)
RAISERROR (@ErrMsg,1,1)
RETURN 0
END_CATCH:
END_TRY:
=====================
СОЗДАНИЕ БАЗЫ ДАННЫХ - важная проблема
Эта процедура выдает мне сообщение об ошибке «Имя файла« DATName »имеет неправильный формат .....»
varable @DATName - 'C:\sql\DATA\RemoteDB.dat.mdf'
(я должен проверить это PRINT @DATName, и все в порядке
Но по какой-то причине строка CREATE DATABASE отказалась принимать значение переменной и принимает только имя (только имя) DATName, которое пытается использовать имя в качестве значения и, конечно, возвращает ошибку
1024 * сейчас *
ТАМ НИКТО, КОТОРЫЙ МОЖЕТ ПОМОЧЬ МНЕ В ЭТОМ ВЫПУСКЕ?
После некоторых советов по устранению неполадок я изменил свой код на это:
PRINT @DATName
CREATE DATABASE [@DBName]
ON PRIMARY
(
NAME = '@DBName1'
,FILENAME = '@DATName'
),
FILEGROUP [@FileGroupN] CONTAINS FILESTREAM
(
NAME = '@DBNamefs'
,FILENAME = '@FSName'
)
LOG ON
(
NAME = '@DBNamelog'
,FILENAME = '@LOGName'
)
и я принимаю ошибку:
Произошла ошибка активации файла. Физическое имя файла «@DATName» может быть неправильным. Диагностируйте и исправьте дополнительные ошибки и повторите операцию.
СОЗДАТЬ БАЗУ ДАННЫХ не удалось. Некоторые имена файлов не могут быть созданы. Проверьте связанные ошибки.
Конечно, @DATName:
'C:\sqlDATA\RemoteDB_dat.mdf'
То же самое я беру, снимая скобки
И то же самое я принимаю, когда удаляю одинарные кавычки
Лефтерис Гкинис
pginis@principalit.gr
0030 22960 32843