1 show variables like 'version' 查看版本 2 3 1: 4 DELIMITER $$ 开始 $$ DELIMITER 结束 其实就是告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了。 5 默认情况下,delimiter是分号;。 6 7 2:创建表: 8 9 创建表: 10 CREATE TABLE tb_student ( 11 id INT PRIMARY KEY auto_increment, //主键约束,自动增长 12 NAME VARCHAR (18) NOT NULL, //非空约束 13 sex VARCHAR (2) check(sex = '男' or sex ='女'), 14 age INT CHECK (age>18 AND age<60), //检查约束 15 address VARCHAR (200), 16 email VARCHAR (200) UNIQUE, //唯一约束 17 tb_id int, 18 //外键约束, 自己的表名(自己的外键) REFERENCES 外部表名(字段) 19 //CONSTRAINT FOREIGN KEY 外键名【表名+约束】(外键) REFERENCES 主表(字段) 20 CONSTRAINT foreign KEY tb_student_fk(tb_id) REFERENCES tb_demp(id) 21 ) 22 23 //建表之后添加外键约束 24 ALTER TABLE tb_student 25 ADD CONSTRAINT foreign KEY tb_student_fk(tb_id) REFERENCES tb_temp(id) 26 27 //设置自动增长 28 alter table tb_student 29 modify column id int auto_increment 30 31 32 mysql: 33 DROP TABLE IF EXISTS Privilege; 删除表如果有,mysql判断存在不存在 用法: 34 1,drop tableviewfunction.. if exists 名称 35 2, if exists(select * from ...) then end if 36 3,mysql判断表是否存在: 37 if EXISTS (select 1 from `INFORMATION_SCHEMA`.`TABLES` WHERE table_name ='AdvMaterial' and TABLE_SCHEMA=database()) 38 database() :获取当前数据库的名称 39 4:if (SELECT COUNT(*) FROM AdvMaterial) = NULL 判断记录是否为空,是空则不存在,但是括号中如果没有这张表则会报错 40 41 CREATE TABLE Privilege( 42 PL_nPrivilegeID int NOT NULL, 43 PL_strDescription varchar(80) NOT NULL, 44 PL_nObjectID int NOT NULL DEFAULT 0, 45 PL_nObjectStatusID int NOT NULL DEFAULT 0, 46 PL_nOperationID int NOT NULL DEFAULT 0, 47 PL_nScope int NOT NULL DEFAULT 0, 48 PL_nParentOperation int NULL, 49 PL_nFunctionClass int NOT NULL DEFAULT 0, 50 CONSTRAINT PK_Privilage PRIMARY KEY CLUSTERED 51 ( 52 PL_nPrivilegeID ASC 53 ) 54 ); 55 56 创建表的知识点: 57 1,默认0约束,default 0 ,不为空 not null 58 2,主键:primary key asc 是递增,desc 是递减, PRIMARY KEY CLUSTERED 主键索引 ,CONSTRAINT约束 59 3,FT_nTemplateID int IDENTITY(1,1) NOT NULL, 列3,FT_nTemplateID int类型 自动增长,每次增加1,不为空 60 IDENTITY(1,1) 写为mysql是: 61 FT_nTemplateID int AUTO_INCREMENT NOT NULL, mysql默认每次增加1 62 4,declare Mon int; declare 申明 Mon 是int类型 sqlserver中直接把[],@等删掉 declare @pubdate datetime declare pubdate datetime 63 5,删除: 64 delete PubInsertionDefine where PID_nPublicationID=@publicationid and PID_dtInsertion between @begindate and @enddate //sqlserver 65 delete PubInsertionDefine FROM PubInsertionDefine where PID_nPublicationID=publicationid and PID_dtInsertion between begindate and enddate; //mysql 66 67 ------------------------------------------------------------------------------------------------------------------------------------------------------- 68 触发器区别: 69 1,mysql不能这样写 AFTER INSERT, UPDATE,不能after后面两个修改的操作 70 mysql触发器用法: 71 create trigger 触发器名称 on 表名 after insert/update for each row 72 begin 73 ... 74 end; 75 2, select @pubdate=@pubdate+1 == set pubdate=pubdate+1 76 77 有定义declare就要有begin end 78 79 sqlserver: 80 CREATE TRIGGER tri_PubDateInsert 81 ON PubDate AFTER INSERT, UPDATE 82 AS 83 BEGIN 84 declare @pubdate datetime 85 declare @publicationid int 86 declare @begindate datetime 87 declare @enddate datetime 88 declare @Mon int 89 declare @Tues int 90 declare @Wed int 91 declare @Thur int 92 declare @Fri int 93 declare @Sat int 94 declare @Sun int 95 declare @wday int 96 declare @delete int 97 select @publicationid=E_PDID, @begindate=E_BeginDate, @enddate=E_EndDate, 98 @Mon=E_Mon, @Tues=E_Tues, @Wed=E_Wed, @Thur=E_Thur, @Fri=E_Fri, @Sat=E_Sat, @Sun=E_Sun, @delete=SYS_DELETEFLAG 99 from INSERTED 100 delete PubInsertionDefine where PID_nPublicationID=@publicationid and PID_dtInsertion between @begindate and @enddate 101 select @pubdate=@begindate 102 if @delete=0 103 while @pubdate<=@enddate 104 begin 105 select @wday=datepart(weekday,@pubdate) 106 if (@wday=1 and @Sun=1) or (@wday=2 and @Mon=1) or (@wday=3 and @Tues=1) or (@wday=4 and @Wed=1) or 107 (@wday=5 and @Thur=1) or (@wday=6 and @Fri=1) or (@wday=7 and @Sat=1) 108 insert PubInsertionDefine values (@publicationid,@pubdate,'系统自动插') 109 select @pubdate=@pubdate+1 110 end 111 END; 112 113 mysql: 114 DROP TRIGGER IF EXISTS `tri_PubDateInsert`; 115 CREATE TRIGGER tri_PubDateInsert AFTER INSERT 116 ON PubDate 117 FOR EACH ROW 118 BEGIN 119 declare pubdate datetime; 120 declare publicationid int; 121 declare begindate datetime; 122 declare enddate datetime; 123 declare Mon int; 124 declare Tues int; 125 declare Wed int; 126 declare Thur int; 127 declare Fri int; 128 declare Sat int; 129 declare Sun int; 130 declare wday int; 131 declare deletee int; 132 SET publicationid=E_PDID, begindate=E_BeginDate, enddate=E_EndDate, 133 Mon=E_Mon, Tues=E_Tues, Wed=E_Wed, Thur=E_Thur, Fri=E_Fri, Sat=E_Sat, Sun=E_Sun, deletee=SYS_DELETEFLAG; 134 delete PubInsertionDefine FROM PubInsertionDefine where PID_nPublicationID=publicationid and PID_dtInsertion between begindate and enddate; 135 SET pubdate=begindate; 136 if deletee=0 AND pubdate<=enddate 137 then set wday=datepart(weekday,pubdate); 138 end if; 139 140 if (wday=1 and Sun=1) or (wday=2 and Mon=1) or (wday=3 and Tues=1) or (wday=4 and Wed=1) or 141 (wday=5 and Thur=1) or (wday=6 and Fri=1) or (wday=7 and Sat=1) 142 then insert PubInsertionDefine values (publicationid,pubdate,'系统自动插'); 143 end if; 144 set pubdate=pubdate+1; 145 END; 146 147 148 ----------------------------------------------------------------------------------------------------------------------------------------------------- 149 视图的区别: 150 mysql 视图的用法:create view 视图名 as select ..from .. where ... 151 条件判断语句 case when: 152 153 1, 154 IF EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[AdDocument]')) 155 DROP VIEW [dbo].[AdDocument]; //判断是否有AdDocument这个视图,如果有就删除 156 mysql: DROP VIEW if EXISTS AdDocument; 157 158 2, 159 其中: 160 convert(float,AI_PagePointX) 在msyql中convert 用法与sqlserver中正好相反 convert(float,AI_PagePointX) 变成convert(AI_PagePointX,DECIMAL) 161 数据类型有几种不一样,分别是:decimal signed varchar 对应int float money char 等类型 162 sqlserver: 163 IF NOT EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[PubDetail]')) 164 EXEC dbo.sp_executesql @statement = N'create view [dbo].[PubDetail] as 165 select SYS_DOCUMENTID PD_nDetailID, AI_InnerPageName PD_strPageName, 166 convert(float,AI_PagePointX) PD_fPosX, convert(float,AI_PagePointY) PD_fPosY, case AI_IfFigSign when 1 then ''y'' else ''n'' end PD_bFigSign 167 from AdvItem 168 where SYS_DELETEFLAG=0'; 169 mysql: 170 DROP VIEW if EXISTS PubDetail ; 171 create view PubDetail as 172 select SYS_DOCUMENTID PD_nDetailID, AI_InnerPageName PD_strPageName, 173 convert(AI_PagePointX,DECIMAL) as PD_fPosX, convert(AI_PagePointY,DECIMAL) as PD_fPosY, 174 case when AI_IfFigSign = 1 then "y" else "n" end PD_bFigSign 175 from AdvItem 176 where SYS_DELETEFLAG=0 ; 177 178 ------------------------------------ 179 3, ''n'',''y'' 变成 "n" : 180 181 IF NOT EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[AdItem]')) 182 EXEC dbo.sp_executesql @statement = N'CREATE view [dbo].[AdItem] as 183 select SYS_DOCUMENTID AI_nAdItemID, AI_OrderID AI_nOrderNo, case AI_IfFigSign when 0 then ''n'' else ''y'' end AI_cIfFigSign, 184 AI_PublishTime AI_dtPublishTime, ''y'' AI_cIfValid, AI_FlowReviseStatus+1 AI_nLockStatus, 185 AI_Publication_ID AI_nPublicationID, AI_Edition_ID AI_nEditionID, AI_TradeID AI_nAdCategoryID, 186 AI_ArticleID AI_nDocumentID, AI_PayMode_ID AI_nPayingCategory, convert(money,AI_AmountReceivable) AI_mAccountReceivable, 187 convert(money,AI_AmountReceived) AI_mPayment, AI_Memo AI_strMemo, ''n'' AI_cIfChecked, 0 AI_nIfExam, AI_Brand_ID AI_nBrandID, 188 AI_Customer_ID AI_nPayerID, case AI_IfCanceled when 0 then ''n'' else ''y'' end AI_cIfCanceled, 189 AI_AdType_ID AI_nAdTypeID, AI_Field_ID AI_nFieldID, AI_PubMemo AI_strPubMemo, AI_PageName AI_strPageName 190 from AdvItem 191 where SYS_DELETEFLAG=0'; 192 193 DROP VIEW if EXISTS AdItem ; 194 create view AdItem as 195 select SYS_DOCUMENTID AI_nAdItemID, AI_OrderID AI_nOrderNo, case AI_IfFigSign when 0 then "n" else "y" end AI_cIfFigSign, 196 AI_PublishTime AI_dtPublishTime, "y" AI_cIfValid, AI_FlowReviseStatus+1 AI_nLockStatus, 197 AI_Publication_ID AI_nPublicationID, AI_Edition_ID AI_nEditionID, AI_TradeID AI_nAdCategoryID, 198 AI_ArticleID AI_nDocumentID, AI_PayMode_ID AI_nPayingCategory, convert(AI_AmountReceivable,DECIMAL) AI_mAccountReceivable, 199 convert(AI_AmountReceived,DECIMAL) AI_mPayment, AI_Memo AI_strMemo, "n" AI_cIfChecked, 0 AI_nIfExam, AI_Brand_ID AI_nBrandID, 200 AI_Customer_ID AI_nPayerID, case AI_IfCanceled when 0 then "n" else "y" end AI_cIfCanceled, 201 AI_AdType_ID AI_nAdTypeID, AI_Field_ID AI_nFieldID, AI_PubMemo AI_strPubMemo, AI_PageName AI_strPageName 202 from AdvItem 203 where SYS_DELETEFLAG=0; 204 205 206 --------------------------------------------------------------------------------------------------------------------------------- 207 PROCEDURE 过程的区别: 208 mysql不支持返回表,可以用其他方法代替,如临时表 209 210 游标: 211 select 要放在declare下面, 212 qxCursor;游标的用法,如下: 213 214 sqlserver: 215 CREATE PROCEDURE [dbo].[usp_CheckUserPrivilege] 216 @strUserID varchar(16), @nPrivilegeId INT AS 217 DECLARE @strName varchar(32) 218 DECLARE @chOk char(1) 219 SELECT @strName=user_strName FROM Users 220 WHERE user_strLoginName = @strUserID 221 declare @str varchar(255) 222 declare qxCursor cursor for 223 select NRESOURCEID from FSYS_PERMISSION, FSYS_ROLEUSERRELATIONS 224 where NID=ROLEID 225 and NRESOURCETYPE='ADV_FIGOUT' 226 and USERCODE=@strUserID 227 open qxCursor 228 fetch next from qxCursor into @str 229 while (@@FETCH_STATUS <> -1) 230 begin 231 IF EXISTS (select * from dbo.ufn_SplitToTable(@str) where n=@nPrivilegeId) 232 BEGIN 233 SELECT @chOk='Y' 234 break 235 END 236 ELSE 237 SELECT @chOk='N' 238 fetch next from qxCursor into @str 239 end 240 close qxCursor 241 deallocate qxCursor 242 IF @strName is NULL 243 SELECT @chOk='F' 244 SELECT @strName, @chOk; 245 mysql: 246 247 while 的用法: 248 while do 249 end while 250 251 if:用法 252 if then; 253 else 254 255 end if 256 257 while 例子: 258 DROP PROCEDURE if EXISTS test_while; 259 CREATE PROCEDURE test_while(in in_count INT) 260 BEGIN 261 DECLARE count int DEFAULT 0; 262 WHILE count<10 do 263 set count = count +1; 264 end WHILE; 265 SELECT count; 266 END 267 268 exg: 269 DROP PROCEDURE IF EXISTS usp_CheckUserPrivilege; 270 CREATE PROCEDURE usp_CheckUserPrivilege 271 ( 272 strUserID varchar(16), nPrivilegeId INT 273 ) 274 BEGIN 275 DECLARE strName varchar(32); 276 DECLARE chOk char(1); 277 278 declare str varchar(255); 279 declare qxCursor cursor for 申明一个游标 280 select NRESOURCEID from FSYS_PERMISSION, FSYS_ROLEUSERRELATIONS 281 where NID=ROLEID 282 and NRESOURCETYPE='ADV_FIGOUT' 283 and USERCODE=strUserID; 284 SELECT strName=user_strName FROM Users 285 WHERE user_strLoginName = strUserID; 286 287 open qxCursor; 打开 288 READ_loop:LOOP 开始遍历 289 fetch next from qxCursor into str; 290 while (FETCH_STATUS <> -1) DO 291 IF ( EXISTS (select * from ufn_SplitToTable where n=nPrivilegeId)) -- ---ufn_SplitToTable(这个方法未完成,返回表),ufn_SplitToTable(str),参数没有传str 292 THEN 293 294 SELECT chOk='Y' ; 295 ELSE 296 SELECT chOk='N'; 297 END IF; 298 FETCH next FROM qxCursor into str; 299 END WHILE; 300 END LOOP; 关闭 301 -- close qxCursor; 302 -- deallocate qxCursor 303 IF strName is NULL 304 THEN 305 SELECT chOk='F' ; 306 SELECT strName, chOk; 307 END IF; 308 END; 309 ------------------------------------------ 310 临时表:(3,usp_CopyReserve) 311 312 直接将查询结果导入临时表 313 CREATE TEMPORARY TABLE tempresv AS SELECT * FROM FigReserve; 314 truncate TABLE tmpTable; -- 使用前先清空临时表。 315 ltrim(AI_ArticleID), 去掉左边空格字符 316 317 临时表实例: 318 CREATE PROCEDURE sp_test_tt(IN i_chars VARCHAR(50),OUT o_counts BIGINT) 319 BEGIN 320 create temporary table if not exists tmpTable 321 ( 322 objChk varchar(255) primary key, 323 ModelName varchar(50), 324 Operator varchar(500), 325 PModelName varchar(50) 326 ); 327 truncate TABLE tmpTable; -- 使用前先清空临时表。 328 329 insert into tmpTable values(i_chars,i_chars,i_chars,i_chars); 330 insert into tmpTable values(i_chars,i_chars,i_chars,i_chars); -- 语句1 331 select * from tmpTable; -- 语句2 332 select count(*) into o_counts from tmpTable; -- 语句3 333 END; 334 335 336 sqlserver: 337 CREATE PROCEDURE [dbo].[usp_CopyReserve] 338 @nPubMask INT, @nGridID INT,@nEditionID INT, 339 @strOldDay VARCHAR(16), @strNewDay VARCHAR(16) AS 340 SELECT * INTO #tempresv FROM FigReserve 341 WHERE 342 FigReserve.FR_dtPubDate = @strOldDay and 343 FigReserve.FR_nPubMask = @nPubMask and 344 FigReserve.FR_nGridID = @nGridID and 345 FigReserve.FR_nEditionMask = @nEditionID 346 UPDATE #tempresv 347 SET FR_dtPubDate=@strNewDay 348 INSERT INTO FigReserve 349 SELECT * FROM #tempresv; 350 mysql: 351 DROP PROCEDURE IF EXISTS usp_CopyReserve; 352 CREATE PROCEDURE usp_CopyReserve 353 ( 354 nPubMask INT, nGridID INT,nEditionID INT, 355 strOldDay VARCHAR(16), strNewDay VARCHAR(16) 356 ) 357 BEGIN 358 DROP TABLE IF EXISTS tempresv; 359 CREATE TEMPORARY TABLE tempresv AS SELECT * FROM FigReserve; 360 truncate TABLE tmpTable; 361 362 INSERT INTO tmpTable SELECT * FROM FigReserve 363 WHERE 364 FigReserve.FR_dtPubDate = strOldDay and 365 FigReserve.FR_nPubMask = nPubMask and 366 FigReserve.FR_nGridID = nGridID and 367 FigReserve.FR_nEditionMask = nEditionID; 368 369 UPDATE tempresv 370 SET FR_dtPubDate=strNewDay; 371 INSERT INTO FigReserve 372 SELECT * FROM tempresv; 373 374 END; 375 376 377 事务: 378 sqlserver: 379 CREATE PROCEDURE [dbo].[usp_getserialex] @serialname varchar(20), @nResult INT OUTPUT AS 380 begin 381 declare @serialno int 382 begin transaction 383 select @serialno = E5VALUE from E5ID with(TABLOCKX HOLDLOCK) where E5IDENTIFIER = @serialname 384 if @serialno is null 385 begin 386 commit 387 --raiserror 50010 'SystemVariable lack record' 388 end 389 else 390 begin 391 update E5ID set E5VALUE = @serialno+1 where E5IDENTIFIER = @serialname 392 commit 393 SELECT @nResult = @serialno+1 394 end 395 end; 396 end; 397 398 mysql: 399 400 DROP PROCEDURE if EXISTS usp_getserialex; 401 CREATE PROCEDURE usp_getserialex 402 ( 403 serialname varchar(20), OUT nResult INT 404 ) 405 begin 406 declare serialno int; 407 START transaction; -- TRANSACTION mysql用start(开始事务) where 前with(TABLOCKX HOLDLOCK) 408 select serialno = E5VALUE from E5ID where E5IDENTIFIER = serialname; 409 if serialno is null 410 then 411 commit; 412 -- raiserror 50010 'SystemVariable lack record' 413 else 414 update E5ID set E5VALUE = serialno+1 where E5IDENTIFIER = serialname; 415 commit; 416 SELECT nResult = serialno+1 ; 417 end if; 418 end; 419 420 function 的区别: 421 mysql function中不能用select 422 423 ifnull:的用法,代替sqlserver中的isnull 424 ifnull函数,如果字段不为null,则取第二个值,如果为空,取第三个值 425 select comm,ifnull(comm,comm+100,100) as comm2 from tb_emp; 426 427 ifnull函数,如果字段不为null,则直接返回该值,如果为空,取第二个 428 select comm,ifnull (comm,100)as comm2 from tb_demp; 429 430 431 sqlserver: 432 CREATE FUNCTION [dbo].[oms_getAdvMaterialOriginalPath] 433 ( 434 @AdvID numeric(10,0) 435 ) 436 RETURNS VARCHAR(4000) 437 AS 438 BEGIN 439 DECLARE @matUrl VARCHAR(4000) 440 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[AdvMaterial]') AND type in (N'U')) 441 begin 442 RETURN @matUrl 443 end 444 445 select @matUrl=isnull(@matUrl+',','')+AdvMaterial_Attachment.ATT_OriginalPath 446 from AdvItem,AdvMaterial,AdvMaterial_Attachment 447 where AdvItem.AI_ArticleID=AdvMaterial.SYS_DOCUMENTID 448 and AdvMaterial.SYS_DOCUMENTID=AdvMaterial_Attachment.ATT_MaterialID 449 and AdvItem.SYS_DOCUMENTID=@advID 450 and AdvMaterial.SYS_DELETEFLAG=0 451 and AdvMaterial_Attachment.SYS_DELETEFLAG=0 452 453 RETURN @matUrl 454 END; 455 456 mysql: 457 CREATE FUNCTION oms_getAdvMaterialOriginalPath 458 ( 459 AdvID numeric(10,0) 460 ) 461 RETURNS VARCHAR(4000) 462 BEGIN 463 DECLARE matUrl VARCHAR(4000); 464 -- if (select table_name from `INFORMATION_SCHEMA`.`TABLES` where table_name ='AdvMaterial' and TABLE_SCHEMA='omstest') = NULL 465 if EXISTS (select 1 from `INFORMATION_SCHEMA`.`TABLES` WHERE table_name ='AdvMaterial' and TABLE_SCHEMA=database()) //判断存在 466 467 THEN 468 select ifnull(matUrl+',','')+AdvMaterial_Attachment.ATT_OriginalPath into matUrl //isnull,ifnull 469 from AdvItem,AdvMaterial,AdvMaterial_Attachment 470 where AdvItem.AI_ArticleID=AdvMaterial.SYS_DOCUMENTID 471 and AdvMaterial.SYS_DOCUMENTID=AdvMaterial_Attachment.ATT_MaterialID 472 and AdvItem.SYS_DOCUMENTID=advID 473 and AdvMaterial.SYS_DELETEFLAG=0 474 and AdvMaterial_Attachment.SYS_DELETEFLAG=0; 475 end if; 476 RETURN matUrl; 477 END; 478 ---------------------------- 479 select区别: 480 481 1,SELECT @A_Area=ISNULL(SUM(AI_AdvPages),0) FROM AdvItem WHERE SYS_DELETEFLAG=0 AND AI_IfCanceled=0 AND AI_PublishTime=@APubDate AND AI_Publication_ID=@APubID 482 483 2,SELECT IFNULL(SUM(AI_AdvPages),0) into A_Area 484 FROM AdvItem 485 WHERE SYS_DELETEFLAG=0 AND AI_IfCanceled=0 AND AI_PublishTime=APubDate AND AI_Publication_ID=APubID; 486 487 ------------------------------------------------------------------------------------------------------------------------------------------------ 488 index区别(p5): 489 索引: 490 作用:在数据库中来加速对表的查询 491 创建:自动在主键和唯一键上面创建索引 492 493 手动创建:create index index_tb_student_name 494 on tb_student(stu_name) 495 496 使用索引,在where之后加上索引,提高查询效率 497 498 499 SHOW INDEX FROM AdvDoc; 显示这张表中的所有索引 500 501 CREATE INDEX IDX01_AdvDoc ON AdvDoc(F_OrderID); 添加这张表的索引 502 503 CREATE INDEX IDX01_AdvDoc ON AdvDoc(F_OrderID, F_Size_ID, F_Color_ID, F_Width, F_Height, F_Content); 504 505 SHOW INDEX FROM AdvDoc; 显示所有索引 506 507 DROP INDEX IDX01_AdvDoc ON AdvDoc; 删除索引,根据索引名称 508 509 510 ALTER TABLE [dbo].[AdvItem] DROP CONSTRAINT [PK_AdvItem]; 511 变: 512 ALTER TABLE AdvItem DROP primary key; 513 514 515 ALTER TABLE [dbo].[AdvItem] ADD CONSTRAINT [PK_AdvItem] PRIMARY KEY NONCLUSTERED 516 ( 517 [SYS_DOCUMENTID] ASC 518 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; 519 520 Alter table AdvItem add primary key(SYS_DOCUMENTID);