易截截图软件、单文件、免安装、纯绿色、仅160KB

在SQL SERVER 2005/2008中拥有一个对象

在SQL SERVER 2005/2008中拥有一个对象
从SQL SERVER2000升级到2005/2008后,一个我们必须重新认识的情况是对象不再有所有者(owner)。架构包含对象,架构有所有者。如果你查询表sys.objects,你将会看到这看起来是正确的,只是表中还有一个字段principal_id,但是一般情况下它总是NULL值。不久前一天,我突然对principal_id字段的表示了疑惑:为什么要存在这个字段呢?我又仔细地看了联机帮助sys.objects的解释:
“如果不是架构所有者,则为单个所有者的 ID。默认情况下,架构包含的对象由架构所有者拥有。不过,通过使用 ALTER AUTHORIZATION 语句更改所有权可以指定备用所有者。”
换句话说,对象现在还可以被一个用户所拥有。但是“备用所有者”又让我打住了,这什么意思呢?让我们先建立一个测试环境:我们需要在两个不同架构中创建两个对象。这些架构属于不同的所有者,当然我们还需要一个测试者,所以还需要一个第三者。让我们搭起这个环境吧:
CREATE USER User1 WITHOUT LOGIN;
GO
CREATE USER User2 WITHOUT LOGIN;
GO
CREATE USER User3 WITHOUT LOGIN;
GO
/* 创建两个架构,并让它属于不同的用户*/
CREATE SCHEMA User1 AUTHORIZATION User1;
GO
CREATE SCHEMA User2 AUTHORIZATION User2;
GO
/* 核查一下架构,看它是否被不同架构所拥有*/
SELECT schema_id, [name], USER_NAME(principal_id) [Owner]
from sys.schemas
WHERE LEFT([name], 4) = 'User';
GO
现在我们已经有了用户和架构,我们再创建一个表和一个引用该表的存储过程。这两个对象分属不同的架构。这就是说没有形成所有权链。
/* 在user1架构上创建一个表。*/
CREATE TABLE User1.MyTable (Number INT);
GO
INSERT INTO User1.MyTable (Number) VALUES (1);
INSERT INTO User1.MyTable (Number) VALUES (2);
INSERT INTO User1.MyTable (Number) VALUES (3);
GO
/* 在user2架构中创建一个存储过程。因为user1和user2这两个架构属于不同的用户,所以不能形成所有权链。*/
CREATE PROC User2.MyProc
AS
BEGIN
  SELECT Number from User1.MyTable;
END;
GO
/* 授权我们的试验用户user3执行存储过程的能力。除此之外,user3没有任何权利,尤其是在user1.MyTable没有权利 */
GRANT EXECUTE ON OBJECT::User2.MyProc TO User3;
GO
/* 核查一下我们刚刚创建的架构和对象和&ldq


相关文档:

sql安装问题

一、情况说明
    sql server 2000以前的版本,例如7.0一般不存在多个版本,只有标准版跟桌面版,用户如果不清楚该装什么版本的话,可按安装上的
安装先决条件指示安装,一般在WIN2000 服务器版上装标准版,其他的系统装桌面版的就可以;而SQL Server 2000安装问题就比较大,时常
见到的问题如下:
......

SQL Server挂起

在运行窗口输入regedit,打开注册表编辑器,在HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager中找到PendingFileRenameOperations,删除该键值,关闭注册表编辑器。重新安装SQL Server 2000,此时,就可以正常进入期待的安装界面了。 ......

在SQL中使用convert函数进行日期的查询

曾经遇到这样的情况,在数据库的Meeting表中有PublishTime (DateTime,8)字段,用来存储一个开会时间,在存入时由于要指明开会具体时间,故格式为yyyy-mm-dd hh:mm:ss,而我们查询时是通过yyyy-mm-dd来进行的,即查询某一天的所有会议信息,这样如果通过select * from Meeting where PublishTime=@PublishTime (参数@PublishTime为y ......

sql行转列


写一个存储过程,将表一按照表二的形式进行查询。
仓库名称 商品名称 数量
A
S001 12
A S002 17
A
S003 10
B S001 21
B
S002 5
B S003 ......

SQL脚本字段[content]和content区别

      今天我在SQL Server 2005中用脚本创建一张表,查资料发现有的脚本中字段有加[]中符号,我问了冬季,得知是这回事,用[]的字段名,即便是sql关键字也可以作为字段名,不会报错。
      SQL Server里的表中添加一个字段,如:time系统会自动加一对方括号即:[time] ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号