CREATE SCHEMA "S-T"AUTHORIZATION WANG;
刷新后在架构上看到新出现的S-T(wang虽然标错但是还是可以建立(后来重启后解决了。离谱))
CREATE SCHEMA AUTHORIZATION WANG;
发现奇怪的现象,命令执行了,在架构里看不到新建立的模式WANG,在问了老师后,原因应该是T-SQL和SQL不同。
可以看看sql server文档,显然我是有点看不太懂,找了找分析。
这是链接:https://blog.csdn.net/weixin_30784945/article/details/96261257
1.当前支持不指定架构名称的 CREATE SCHEMA 语句,目的是为了向后兼容。 此类语句并不在数据库中实际创建架构,但它们会创建表和视图,并授予权限。 主体不需要 CREATE SCHEMA 权限来执行这一早期形式的 CREATE SCHEMA,因为不会创建任何架构。 此功能将从 SQL Server 的未来版本中删除。
2.需要对数据库拥有 CREATE SCHEMA 权限。
3.若要创建在 CREATE SCHEMA 语句中指定的对象,用户必须拥有相应的 CREATE 权限。
4.若要指定其他用户作为所创建架构的所有者,则调用方必须具有对该用户的 IMPERSONATE 权限。 如果指定一个数据库角色作为所有者,则调用方必须拥有该角色的成员身份或对该角色拥有 ALTER 权限。
我的理解就是创建之前必须获得权限,并且不在数据库中实际创建架构,但用它们创建表和视图,并授予权限。(不知道理解的对不对,有错的话,希望大佬指正)
连着写第一个可以不用写TEST
CREATE SCHEMA TEST AUTHORIZATION WANG--不要加分号
CREATE TABLE TAB1(COL1 SMALLINT,
COL2 INT,
COL3 CHAR(20),
COL4 NUMERIC(10,3),
COL5 DECIMAL(5,3)
);
CREATE TABLE TEST.TAB2(COL1 SMALLINT,
COL2 INT,
COL3 CHAR(20),
COL4 NUMERIC(10,3),
COL5 DECIMAL(5,3)
);
这期间又遇到问题,我人晕了。最后在我坚持不懈的努力重启后解决了(amazing)
DROP SCHEMA TEST CASCADE;是错误的
这是因为SQL Server不支持在删除过程中使用CASCADE/RESTRICT关键字
将其CASCADE删去后,依旧有错误显示
因为我们删除TEST架构前,要先删除架构中创建的对象tab1,tab2
DROP TABLE TEST.TAB1;
DROP TABLE TEST.TAB2;
DROP SCHEMA TEST;
CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY,--主码
Sname CHAR (20) UNIQUE,--唯一
Ssex CHAR (2),
Sage SMALLINT,
Sdept CHAR(20)
);
CREATE TABLE Course
(Cno CHAR(4)PRIMARY KEY,
Cname CHAR(40),
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY(Cpno)REFERENCES Course(Cno)
);
Cpno是外码,被参照表是Course,被参照列是Cno
CREATE TABLE SC
(Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY(Sno,Cno), --主码由两个属性构成,必须作为表级完整性进行定义
FOREIGN KEY(Sno) REFERENCES Student(Sno),
FOREIGN KEY(Cno)REFERENCES Course(Cno)
);
ALTER TABLE Student ADD S_entrance DATE;
ALTER TABLE Student ALTER COLUMN Sage INT;
ALTER TABLE Course ADD UNIQUE(Cname);
直接删除会有问题,因为sc表还有对他的引用
DROP TABLE Student
select name
from sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o.object_id
where f.parent_object_id=object_id(‘表名’) --通过这个来得到约束名
select name
from sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o.object_id
where f.parent_object_id=object_id('SC')
--ALTER TABLE 外码的表名 DROP CONSTRAINT 外键约束名
ALTER TABLE SC DROP CONSTRAINT FK__SC__Sno__2C3393D0
之后就可以删除表了
DROP TABLE Student ;
删除表时,如果有视图要先删掉视图,才能删掉表
DROP VIEW View_1;--删除视图操作
1.T-SQL和SQL语句有一些不同,有问题时可以查查文档。
2.SQL Server不支持在删除过程中使用CASCADE/RESTRICT关键字