首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

提问,该怎么解决

2013-04-05 
提问本帖最后由 lvjiezi 于 2013-03-22 12:39:57 编辑做练习的时候按照案例输入了公式declare @data_path

提问
本帖最后由 lvjiezi 于 2013-03-22 12:39:57 编辑 做练习的时候按照案例输入了公式

declare @data_path nvarchar(256);
set @data_path=(select SUBSTRING(physical_name, 1, charindex(N'master.mdf',LOWER(physical_name))-1)
FROM master.sys.master_files
WHERE DATABASE_PRINCIPAL_ID= 1 AND FILE_ID = 1);
execute('create database demo on primary
(name = arch1,filename = '''+@data_path + 'demodb1.mdf'',size = 100MB, maxsize = 200,
filegrowth = 20),
(name = arch2,filename = '''+@data_path + 'demodb2.ndf'',size = 100mb, maxsize = 200,
filegrowth = 20),
(name = arch3,filename = '''+@data_path + 'demodb3.ndf'',size = 100mb, maxsize = 200,
filegrowth = 20)
log on 
(name = archlog1, filename = '''+@data_path + 'archlog1.ldf'',size = 100 mb, maxsize = 200,
filegrowth = 20),
(name = archlog2, filename = '''+@data_path + 'archlog2.ldf'',size = 100 mb, maxsize = 200,
filegrowth = 20)');


检验过程命令可以通过,但是执行的时候提示(列名 'DATABASE_PRINCIPAL_ID' 无效。),想知道出错在那里,还需要哪些前提条件??

    
[解决办法]

DECLARE @data_path NVARCHAR(256) ;
SET @data_path = ( SELECT TOP 1
                            SUBSTRING(physical_name, 1,
                                      CHARINDEX(N'master.mdf',
                                                LOWER(physical_name)) - 1)
                   FROM     master.sys.master_files
                   WHERE    DATABASE_PRINCIPAL_ID() = 1
                            AND FILE_ID = 1
                 ) ;
EXECUTE('create database demo on primary
(name = arch1,filename = '''+@data_path + 'demodb1.mdf'',size = 100MB, maxsize = 200,
filegrowth = 20),
(name = arch2,filename = '''+@data_path + 'demodb2.ndf'',size = 100mb, maxsize = 200,
filegrowth = 20),
(name = arch3,filename = '''+@data_path + 'demodb3.ndf'',size = 100mb, maxsize = 200,
filegrowth = 20)
log on 
(name = archlog1, filename = '''+@data_path + 'archlog1.ldf'',size = 100 mb, maxsize = 200,


filegrowth = 20),
(name = archlog2, filename = '''+@data_path + 'archlog2.ldf'',size = 100 mb, maxsize = 200,
filegrowth = 20)') ;


[解决办法]
引用:
按照版主帖子8的最新公式,系统予以通过,我会对照一下两条公式看看能不能理解,不能再问版主,
按照版主
SELECT  SUBSTRING(physical_name, 1, LEN(physical_name))
FROM    master.sys.master_files
WHERE   DATABASE_PRINCIPAL_ID() = 1
        AND FILE_ID ……
这个查询是告诉你有多条数据而已,而它的原有查询是先找到每个目前在实例下的数据库存放的路径,然后赋给一个变量,在后面动态生成的时候,写上路径名,也就是说,把新库的mdf、ndf、ldf放在同一个文件夹下,但是万一有几个数据库的存放路径不一样,那么就会报错。
[解决办法]
declare @data_path nvarchar(256);
 set @data_path=(select SUBSTRING(physical_name, 1, charindex(N'master.mdf',LOWER(physical_name))-1)
 FROM master.sys.master_files
 WHERE database_id= 1 AND FILE_ID = 1);
你把DATABASE_PRINCIPAL_ID这个改成database_id就可以了,有时候书上有点错误是正常的啊。
@data_path就就是取数据库的绝对路径的。

热点排行