因为这个数据库是不知道当时是那个版本创建的,在官方看了一下,解释说权限不对,应该把这个数据库放到SqlServer安装的目录下,也就是C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data,果然解决问题;不过总不能每次都把数据库放到这个目录下啊!所以又寻找了其他的解决方案;
第一种解决方案:就是刚才的方法,把这个文件放到SqlServer默认位置下,不过最好不要放在C盘,万一那天重装系统,就玩完了,哈哈;
第二种解决方案:就是更改Sqlserver实列的默认数据库文件夹,选中Sqlserver实例,右击属性,在左边有个“数据库设置”,点开后,有个“数据库默认位置”,把这个设置成自己的目录就可以了。
第三种解决方案:就是更改这个数据库所在文件夹的权限,添加一个EveryOne的用户,设置成”full control”,就可以了,这个方案即直接又方便;
第四种:按一下方式修改你的SQL的MDF和LDF属性就可以了,选择你的文件(两种文件均要修改为一样的权限)
MDF文件:文件右键>>属性>>安全>>编辑>>添加>>高级>>立即查找>>在搜索结果中选择:Authenticated Users>>确定>>确定>>确定>>MDF文件属性对话框>>在组或用户名列表框中选择:Authenticated Users>>高级>>更改权限>>编辑>>选中“安全控制”>>确定>>确定>>确定>>确定。OK这是MDF的权限就分配完成了!
LDF文件的权限和MDF文件的权限控制一样,按照上面的步骤进行就行了!
如果有其他的附加错误,应该也是权限的问题,只要修改文件的权限就行了,多试试就完事OK!
本文链接
FROM sys.objects
WHERE name = 'P_DeleteDscirption'
AND type = 'p' )
BEGIN
DROP PROCEDURE P_DeleteDscirption
END
GO
CREATE PROCEDURE P_DeleteDscirption
AS
BEGIN
IF OBJECT_ID('tempdb..#temp') IS NOT NULL
DROP TABLE #temp
DECLARE @index INT ,
@rowCount INT ,
@tableID INT ,
@colID INT ,
@Sql NVARCHAR(4000) ,
@colName NVARCHAR(200) ,
@tableName NVARCHAR(200)
-------------缓存临时数据
SELECT t.name AS TableName ,
c.name AS ColumnName ,
c.object_id AS TableID ,
c.column_id AS ColID
INTO #temp
FROM sys.columns AS c
LEFT JOIN sys.objects AS t ON c.object_id = t.object_id
WHERE t.type = 'u'
-------------获取循环阀值
SELECT @index = 0 ,
@rowCount = COUNT(1)
FROM (SELECT DISTINCT
TableName
FROM #temp
) AS t
WHILE (@index < @rowCount)
BEGIN
SELECT @Sql = N'' ,
@index = @index + 1
-------------取出表名和表的object_id
SELECT @tableName = t.TableName ,
@tableID = T.TableID
FROM (SELECT DISTINCT
TableName ,TableID,
DENSE_RANK() OVER (ORDER BY TableName) AS [rowIndex]
FROM #temp
) AS t
WHERE t.rowIndex = @index
-------------判断表是否有说明
IF EXISTS ( SELECT * FROM sys.extended_properties WHERE major_id = @tableID AND minor_id = 0 AND name = N'MS_Description' )
BEGIN
SET @Sql = @Sql
+ 'EXEC sys.sp_dropextendedproperty @name = N''MS_Description'' ,@level0type = N''SCHEMA'', @level0name = N''dbo'' , @level1type = N''
- 警告:现存列的 ANSI_PADDING 设置为 'off'。新的列将以 ANSI_PADDING 为 'on' 的设置被创建。
当设置为OFF时,剪裁varchar列的尾随空格和varbinary列的尾随零。该设置只影响新列的定义。
关于Ansi_Padding的用法
当设置为ON时,不剪裁字符值中插入到varchar列的尾随空格和二进制值中插入到varbinary列的尾随零。不将值按列的长度进行填充。当设置为OFF时,剪裁varchar列的尾随空格和varbinary列的尾随零。该设置只影响新列的定义。
SETANSI_PADDING为ON时,将允许空值的Char(n)和binary(n)列填充到列长;而当SETANSI_PADDING为OFF时,将剪裁尾随空格和零,始终将不允许空值的Char(n)和binary(n)列填充到列长。
示例代码:
GO
PRINT'TestingwithANSI_PADDINGON'
GO
CREATETABLEt1
(charcolchar(16)NULL,
varcharcolvarchar(16)NULL,
varbinarycolvarbinary(8))
GO
INSERTINTOt1VALUES('Noblanks','Noblanks',0x00ee)
INSERTINTOt1VALUES('Trailingblank','Trailingblank',0x00ee00)
SELECT'CHAR'='>'+charcol+'<','VARCHAR'='>'+varcharcol+'<',
varbinarycol
FROMt1
GO
SETANSI_PADDINGOFF
GO
PRINT'TestingwithANSI_PADDINGOFF'
GO
CREATETABLEt2
(charcolchar(16)NULL,
varcharcolvarchar(16)NULL,
varbinarycolvarbinary(8))
GO
INSERTINTOt2VALUES('Noblanks','Noblanks',0x00ee)
INSERTINTOt2VALUES('Trailingblank','Trailingblank',0x00ee00)
SELECT'CHAR'='>'+charcol+'<','VARCHAR'='>'+varcharcol+'<',
varbinarycol
FROMt2
GO
DROPTABLEt1
DROPTABLEt2
GO
本文链接