在这个论坛的一位好伙伴(DJHnz先生)的帮助下,我解决了关于创建流数据库的第一个问题 现在我面临另一个问题 我给你的代码是:
USE [master]
GO
/****** Object: StoredProcedure [dbo].[sp_AddStreamDB] Script Date: 12/21/2009 09:55:47 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER 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),
@CreateSdb nvarchar(MAX),
@Statement nvarchar(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)
SET @CreateSdb =('CREATE DATABASE ' + @DBName + ' ON PRIMARY (NAME = ' + @DBName1 + ', FILENAME = ' + @DATName + '), FILEGROUP ' + @FileGroupN + ' CONTAINS FILESTREAM (NAME = ' + @DBNamefs + ', FILENAME = ' + @FSName + ') LOG ON (NAME = ' + @DBNamelog + ', FILENAME = ' + @LOGName + ')')
SET @Statement = ' '
BEGIN_CATCH:
SELECT ERROR_MESSAGE() as ErrorMessage;
SELECT @ErrMsg = ERROR_MESSAGE()
EXEC master.sys.sp_executesql @CreateSdb, @Statement
RAISERROR (@ErrMsg,1,1)
RETURN 0
END_CATCH:
END_TRY:
到目前为止,一切正常,直到远程服务器尝试为流数据库创建必要的文件
无法打开物理文件“C:\ sqlDATA \ RemoteDB_fs”。操作系统错误-2147024891:“0x80070005(访问被拒绝。)”。
驱动器C:\的名称位于远程计算机上(与Windows Server 2003在同一网络中靠近我的计算机;稍后我将为我的ISP计算机运行程序) 子文件夹sqlDATA \已经在那里我手动创建它应该是。 在我的本地机器上,所有包都工作正常,DATA BASE创建正常,但是当我使用远程服务器时问题就开始了。
现在我需要帮助:
答案 0 :(得分:3)
SQL Server服务帐户没有C:\ SQLData
的权限答案 1 :(得分:0)
正如@gbn所解释的那样:
C:\sqlDATA
目录必须存在。\RemoteDB_fs
子目录不得存在。