Database | Proc | Application | Created | Links |
sybsystemprocs | sp_commonkey | 31 Aug 14 | Defects Dependencies |
1 2 /* Sccsid = "%Z% generic/sproc/src/%M% %I% %G%" */ 3 /* 4.8 1.1 06/14/90 sproc/src/commonkey */ 4 /* 5 ** Messages for "sp_commonkey" 17390 6 ** 7 ** 17390, "Table or view name must be in 'current' database." 8 ** 17391, "First table in the common key doesn't exist." 9 ** 17392, "Second table in the common key doesn't exist." 10 ** 17393, "Only the table owner may define its common keys." 11 ** 17394, "The tables have no such first column or the columns are of different types." 12 ** 17395, "The tables have no such second column or the columns are of different types." 13 ** 17396, "The tables have no such third column or the columns are of different types." 14 ** 17397, "The tables have no such fourth column or the columns are of different types." 15 ** 17398, "The tables have no such fifth column or the columns are of different types." 16 ** 17399, "The tables have no such sixth column or the columns are of different types." 17 ** 17400, "The tables have no such seventh column or the columns are of different types." 18 ** 17401, "The tables have no such eighth column or the columns are of different types." 19 ** 17402, "New common key added." 20 ** 17756, "The execution of the stored procedure '%1!' in database 21 ** '%2!' was aborted because there was an error in writing the 22 ** replication log record." 23 ** 17403, "Common key definition already exists between the tables '%1!' and table '%2!' for the specified columns." 24 */ 25 26 27 /* 28 ** IMPORTANT NOTE: 29 ** This stored procedure uses the built-in function object_id() in the 30 ** where clause of a select query. If you intend to change this query 31 ** or use the object_id() or db_id() builtin in this procedure, please read the 32 ** READ.ME file in the $DBMS/generic/sproc directory to ensure that the rules 33 ** pertaining to object-id's and db-id's outlined there, are followed. 34 */ 35 36 create procedure sp_commonkey 37 @tabaname varchar(767), /* name of first table in the key */ 38 @tabbname varchar(767), /* name of second table in the key */ 39 @col1a varchar(255), /* first column name of first table */ 40 @col1b varchar(255), /* first column name of second table */ 41 @col2a varchar(255) = NULL, 42 @col2b varchar(255) = NULL, 43 @col3a varchar(255) = NULL, 44 @col3b varchar(255) = NULL, 45 @col4a varchar(255) = NULL, 46 @col4b varchar(255) = NULL, 47 @col5a varchar(255) = NULL, 48 @col5b varchar(255) = NULL, 49 @col6a varchar(255) = NULL, 50 @col6b varchar(255) = NULL, 51 @col7a varchar(255) = NULL, 52 @col7b varchar(255) = NULL, 53 @col8a varchar(255) = NULL, 54 @col8b varchar(255) = NULL 55 as 56 57 declare @uida int /* owner of the first table */ 58 declare @uidb int /* owner of the second table */ 59 declare @cnt int /* how many columns are in the key */ 60 declare @msg varchar(1024) 61 62 declare @key1a int /* colids of the first table */ 63 declare @key2a int 64 declare @key3a int 65 declare @key4a int 66 declare @key5a int 67 declare @key6a int 68 declare @key7a int 69 declare @key8a int 70 71 declare @key1b int /* colids of the second table */ 72 declare @key2b int 73 declare @key3b int 74 declare @key4b int 75 declare @key5b int 76 declare @key6b int 77 declare @key7b int 78 declare @key8b int 79 declare @dbname varchar(255) 80 81 82 if @@trancount = 0 83 begin 84 set chained off 85 end 86 87 set transaction isolation level 1 88 89 /* 90 ** Check to see that the tabnames are local. 91 */ 92 if @tabaname like "%.%.%" 93 begin 94 if substring(@tabaname, 1, charindex(".", @tabaname) - 1) != db_name() 95 begin 96 /* 97 ** 17390, "Table or view name must be in 'current' database." 98 */ 99 raiserror 17390 100 return (1) 101 end 102 end 103 if @tabbname like "%.%.%" 104 begin 105 if substring(@tabbname, 1, charindex(".", @tabbname) - 1) != db_name() 106 begin 107 /* 108 ** 17390, "Table or view name must be in 'current' database." 109 */ 110 raiserror 17390 111 return (1) 112 end 113 end 114 115 /* 116 ** See if we can find the objects. They must be a system table, user table, 117 ** or view. The low 3 bits of sysobjects.sysstat indicate what the 118 ** object type is -- it's more reliable than using sysobjects.type which 119 ** could change. 120 */ 121 if not exists (select * 122 from sysobjects 123 where id = object_id(@tabaname) 124 and (sysstat & 7 = 1 /* system table */ 125 or sysstat & 7 = 2 /* view */ 126 or sysstat & 7 = 3)) /* user table */ 127 /* 128 ** If either of the tables don't exist, quit. 129 */ 130 begin 131 /* 132 ** 17391, "First table in the common key doesn't exist." 133 */ 134 raiserror 17391 135 return (1) 136 end 137 if not exists (select id 138 from sysobjects 139 where id = object_id(@tabbname) 140 and (sysstat & 7 = 1 141 or sysstat & 7 = 2 142 or sysstat & 7 = 3)) 143 begin 144 /* 145 ** 17392, "Second table in the common key doesn't exist." 146 */ 147 raiserror 17392 148 return (1) 149 end 150 151 /* 152 ** In order to define a commonkey, the user must be the owner of one of 153 ** the tables. 154 */ 155 select @uida = uid 156 from sysobjects 157 where id = object_id(@tabaname) 158 and (sysstat & 7 = 1 /* system table */ 159 or sysstat & 7 = 2 /* view */ 160 or sysstat & 7 = 3) /* user table */ 161 162 select @uidb = uid 163 from sysobjects 164 where id = object_id(@tabbname) 165 and (sysstat & 7 = 1 /* system table */ 166 or sysstat & 7 = 2 /* view */ 167 or sysstat & 7 = 3) /* user table */ 168 169 if (@uida != user_id() and @uidb != user_id()) 170 begin 171 /* 172 ** 17393, "Only the table owner may define its common keys." 173 */ 174 raiserror 17393 175 return (1) 176 end 177 178 /* 179 ** Now check to see that the first key columns exist and have compatible types. 180 */ 181 select @cnt = 1, @key1a = a.colid, @key1b = b.colid 182 from syscolumns a, syscolumns b, master.dbo.spt_values y, 183 master.dbo.spt_values z 184 where a.name = @col1a 185 and a.id = object_id(@tabaname) 186 and b.name = @col1b 187 and b.id = object_id(@tabbname) 188 and y.type = "J" 189 and a.type = y.low 190 and z.type = "J" 191 and b.type = z.low 192 and y.number = z.number 193 if @key1a is NULL 194 begin 195 /* 196 ** 17394, "The tables have no such first column or the columns are of different types." 197 */ 198 raiserror 17394 199 return (1) 200 end 201 202 if @col2a is not NULL 203 begin 204 select @cnt = @cnt + 1, @key2a = a.colid, @key2b = b.colid 205 from syscolumns a, syscolumns b, master.dbo.spt_values y, 206 master.dbo.spt_values z 207 where a.name = @col2a 208 and a.id = object_id(@tabaname) 209 and b.name = @col2b 210 and b.id = object_id(@tabbname) 211 and y.type = "J" 212 and a.type = y.low 213 and z.type = "J" 214 and b.type = z.low 215 and y.number = z.number 216 if @key2a is NULL 217 begin 218 /* 219 ** 17395, "The tables have no such second column or the columns are of different types." 220 */ 221 raiserror 17395 222 return (1) 223 end 224 end 225 else goto keys_ok 226 227 if @col3a is not NULL 228 begin 229 select @cnt = @cnt + 1, @key3a = a.colid, @key3b = b.colid 230 from syscolumns a, syscolumns b, master.dbo.spt_values y, 231 master.dbo.spt_values z 232 where a.name = @col3a 233 and a.id = object_id(@tabaname) 234 and b.name = @col3b 235 and b.id = object_id(@tabbname) 236 and y.type = "J" 237 and a.type = y.low 238 and z.type = "J" 239 and b.type = z.low 240 and y.number = z.number 241 if @key3a is NULL 242 begin 243 /* 244 ** 17396, "The tables have no such third column or the columns are of different types." 245 */ 246 raiserror 17396 247 return (1) 248 end 249 end 250 else goto keys_ok 251 252 if @col4a is not NULL 253 begin 254 select @cnt = @cnt + 1, @key4a = a.colid, @key4b = b.colid 255 from syscolumns a, syscolumns b, master.dbo.spt_values y, 256 master.dbo.spt_values z 257 where a.name = @col4a 258 and a.id = object_id(@tabaname) 259 and b.name = @col4b 260 and b.id = object_id(@tabbname) 261 and y.type = "J" 262 and a.type = y.low 263 and z.type = "J" 264 and b.type = z.low 265 and y.number = z.number 266 if @key4a is NULL 267 begin 268 /* 269 ** 17397, "The tables have no such fourth column or the columns are of different types." 270 */ 271 raiserror 17397 272 return (1) 273 end 274 end 275 else goto keys_ok 276 277 if @col5a is not NULL 278 begin 279 select @cnt = @cnt + 1, @key5a = a.colid, @key5b = b.colid 280 from syscolumns a, syscolumns b, master.dbo.spt_values y, 281 master.dbo.spt_values z 282 where a.name = @col5a 283 and a.id = object_id(@tabaname) 284 and b.name = @col5b 285 and b.id = object_id(@tabbname) 286 and y.type = "J" 287 and a.type = y.low 288 and z.type = "J" 289 and b.type = z.low 290 and y.number = z.number 291 if @key5a is NULL 292 begin 293 /* 294 ** 17398, "The tables have no such fifth column or the columns are of different types." 295 */ 296 raiserror 17398 297 return (1) 298 end 299 end 300 else goto keys_ok 301 302 if @col6a is not NULL 303 begin 304 select @cnt = @cnt + 1, @key6a = a.colid, @key6b = b.colid 305 from syscolumns a, syscolumns b, master.dbo.spt_values y, 306 master.dbo.spt_values z 307 where a.name = @col6a 308 and a.id = object_id(@tabaname) 309 and b.name = @col6b 310 and b.id = object_id(@tabbname) 311 and y.type = "J" 312 and a.type = y.low 313 and z.type = "J" 314 and b.type = z.low 315 and y.number = z.number 316 if @key6a IS NULL 317 begin 318 /* 319 ** 17399, "The tables have no such sixth column or the columns are of different types." 320 */ 321 raiserror 17399 322 return (1) 323 end 324 end 325 else goto keys_ok 326 327 if @col7a is not NULL 328 begin 329 select @cnt = @cnt + 1, @key7a = a.colid, @key7b = b.colid 330 from syscolumns a, syscolumns b, master.dbo.spt_values y, 331 master.dbo.spt_values z 332 where a.name = @col7a 333 and a.id = object_id(@tabaname) 334 and b.name = @col7b 335 and b.id = object_id(@tabbname) 336 and y.type = "J" 337 and a.type = y.low 338 and z.type = "J" 339 and b.type = z.low 340 and y.number = z.number 341 if @key7a is NULL 342 begin 343 /* 344 ** 17400, "The tables have no such seventh column or the columns are of different types." 345 */ 346 raiserror 17400 347 return (1) 348 end 349 end 350 else goto keys_ok 351 352 if @col8a is not NULL 353 begin 354 select @cnt = @cnt + 1, @key8a = a.colid, @key8b = b.colid 355 from syscolumns a, syscolumns b, master.dbo.spt_values y, 356 master.dbo.spt_values z 357 where a.name = @col8a 358 and a.id = object_id(@tabaname) 359 and b.name = @col8b 360 and b.id = object_id(@tabbname) 361 and y.type = "J" 362 and a.type = y.low 363 and z.type = "J" 364 and b.type = z.low 365 and y.number = z.number 366 if @key8a is NULL 367 begin 368 /* 369 ** 17401, "The tables have no such eighth column or the columns are of different types." 370 */ 371 raiserror 17401 372 return (1) 373 end 374 end 375 376 /* 377 ** If we made it this far then all the columns for the common key are ok. 378 ** Everything is consistent so add the common key to syskeys. 379 */ 380 keys_ok: 381 382 /* 383 ** Before we insert a new common key relationship, check if a duplicate 384 ** one exists. If so, fail this new insert. We are allowed to only have 385 ** one common key relationship defined for a set of tables on the same 386 ** set of columns. In case of common key relationships, users can define 387 ** one even on a table that they don't own. So we have to check for the 388 ** existence of a row for both 'tabaname' and 'tabbname'. [ See below where 389 ** the INSERT is done. ] 390 */ 391 /* 392 ** User owns 'tableA'. So if there was a relationship defined earlier, it 393 ** would have been [from id] tableA -> [to depid] tableB. Check if one 394 ** such row exists. 395 */ 396 if (@uida = user_id()) 397 begin 398 if exists (select 1 from syskeys 399 where id = object_id(@tabaname) 400 and type = 3 401 and depid = object_id(@tabbname) 402 and keycnt = @cnt 403 and size = 0 404 and key1 = @key1a 405 and key2 = @key2a 406 and key3 = @key3a 407 and key4 = @key4a 408 and key5 = @key5a 409 and key6 = @key6a 410 and key7 = @key7a 411 and key8 = @key8a 412 413 and depkey1 = @key1b 414 and depkey2 = @key2b 415 and depkey3 = @key3b 416 and depkey4 = @key4b 417 and depkey5 = @key5b 418 and depkey6 = @key6b 419 and depkey7 = @key7b 420 and depkey8 = @key8b 421 ) 422 begin 423 raiserror 17403, @tabaname, @tabbname 424 return (1) 425 end 426 end 427 /* 428 ** User owns 'tableB'. So if there was a relationship defined earlier, it 429 ** would have been [from id] tableB -> [to depid] tableA. Check if one 430 ** such row exists. 431 */ 432 else if exists (select 1 from syskeys 433 where id = object_id(@tabbname) 434 and type = 3 435 and depid = object_id(@tabaname) 436 and keycnt = @cnt 437 and size = 0 438 and key1 = @key1b 439 and key2 = @key2b 440 and key3 = @key3b 441 and key4 = @key4b 442 and key5 = @key5b 443 and key6 = @key6b 444 and key7 = @key7b 445 and key8 = @key8b 446 447 and depkey1 = @key1a 448 and depkey2 = @key2a 449 and depkey3 = @key3a 450 and depkey4 = @key4a 451 and depkey5 = @key5a 452 and depkey6 = @key6a 453 and depkey7 = @key7a 454 and depkey8 = @key8a 455 ) 456 begin 457 raiserror 17403, @tabbname, @tabaname 458 return (1) 459 end 460 461 /* 462 ** This transaction also writes a log record for replicating the 463 ** invocation of this procedure. If logexec() fails, the transaction 464 ** is aborted. 465 ** 466 ** IMPORTANT: The name rs_logexec is significant and is used by 467 ** Replication Server. 468 */ 469 begin transaction rs_logexec 470 471 if @uida = user_id() 472 begin 473 insert syskeys(id, type, depid, keycnt, size, 474 key1, key2, key3, key4, key5, key6, key7, key8, 475 depkey1, depkey2, depkey3, depkey4, depkey5, depkey6, 476 depkey7, depkey8, spare1) 477 values (object_id(@tabaname), 3, object_id(@tabbname), @cnt, 0, 478 @key1a, @key2a, @key3a, @key4a, @key5a, @key6a, @key7a, @key8a, 479 @key1b, @key2b, @key3b, @key4b, @key5b, @key6b, 480 @key7b, @key8b, 0) 481 end 482 else 483 begin 484 485 /* 486 ** The user owns the second table but not the first. In this case, we need 487 ** to invert the entries inserted into syskeys. This is done to 488 ** keep things consistent for the sp_dropkey procedure. 489 */ 490 insert syskeys(id, type, depid, keycnt, size, 491 key1, key2, key3, key4, key5, key6, key7, key8, 492 depkey1, depkey2, depkey3, depkey4, depkey5, depkey6, 493 depkey7, depkey8, spare1) 494 values (object_id(@tabbname), 3, object_id(@tabaname), @cnt, 0, 495 @key1b, @key2b, @key3b, @key4b, @key5b, @key6b, @key7b, @key8b, 496 @key1a, @key2a, @key3a, @key4a, @key5a, @key6a, 497 @key7a, @key8a, 0) 498 end 499 500 if (@@error != 0) 501 begin 502 rollback transaction rs_logexec 503 return (1) 504 end 505 506 /* 507 ** Write the log record to replicate this invocation 508 ** of the stored procedure. 509 */ 510 if (logexec() != 1) 511 begin 512 /* 513 ** 17756, "The execution of the stored procedure '%1!' in 514 ** database '%2!' was aborted because there was an 515 ** error in writing the replication log record." 516 */ 517 select @dbname = db_name() 518 raiserror 17756, "sp_commonkey", @dbname 519 520 rollback transaction rs_logexec 521 return (1) 522 end 523 524 commit transaction 525 526 /* 527 ** 17402, "New common key added." 528 */ 529 exec sp_getmessage 17402, @msg output 530 print @msg 531 532 return (0) 533 534
exec sp_procxmode 'sp_commonkey', 'AnyMode' go Grant Execute on sp_commonkey to public go
DEFECTS | |
QJWI 5 Join or Sarg Without Index | 189 |
QJWI 5 Join or Sarg Without Index | 191 |
QJWI 5 Join or Sarg Without Index | 212 |
QJWI 5 Join or Sarg Without Index | 214 |
QJWI 5 Join or Sarg Without Index | 237 |
QJWI 5 Join or Sarg Without Index | 239 |
QJWI 5 Join or Sarg Without Index | 262 |
QJWI 5 Join or Sarg Without Index | 264 |
QJWI 5 Join or Sarg Without Index | 287 |
QJWI 5 Join or Sarg Without Index | 289 |
QJWI 5 Join or Sarg Without Index | 312 |
QJWI 5 Join or Sarg Without Index | 314 |
QJWI 5 Join or Sarg Without Index | 337 |
QJWI 5 Join or Sarg Without Index | 339 |
QJWI 5 Join or Sarg Without Index | 362 |
QJWI 5 Join or Sarg Without Index | 364 |
MTYP 4 Assignment type mismatch key1: smallint = int | 478 |
MTYP 4 Assignment type mismatch key2: smallint = int | 478 |
MTYP 4 Assignment type mismatch key3: smallint = int | 478 |
MTYP 4 Assignment type mismatch key4: smallint = int | 478 |
MTYP 4 Assignment type mismatch key5: smallint = int | 478 |
MTYP 4 Assignment type mismatch key6: smallint = int | 478 |
MTYP 4 Assignment type mismatch key7: smallint = int | 478 |
MTYP 4 Assignment type mismatch key8: smallint = int | 478 |
MTYP 4 Assignment type mismatch depkey1: smallint = int | 479 |
MTYP 4 Assignment type mismatch depkey2: smallint = int | 479 |
MTYP 4 Assignment type mismatch depkey3: smallint = int | 479 |
MTYP 4 Assignment type mismatch depkey4: smallint = int | 479 |
MTYP 4 Assignment type mismatch depkey5: smallint = int | 479 |
MTYP 4 Assignment type mismatch depkey6: smallint = int | 479 |
MTYP 4 Assignment type mismatch depkey7: smallint = int | 480 |
MTYP 4 Assignment type mismatch depkey8: smallint = int | 480 |
MTYP 4 Assignment type mismatch key1: smallint = int | 495 |
MTYP 4 Assignment type mismatch key2: smallint = int | 495 |
MTYP 4 Assignment type mismatch key3: smallint = int | 495 |
MTYP 4 Assignment type mismatch key4: smallint = int | 495 |
MTYP 4 Assignment type mismatch key5: smallint = int | 495 |
MTYP 4 Assignment type mismatch key6: smallint = int | 495 |
MTYP 4 Assignment type mismatch key7: smallint = int | 495 |
MTYP 4 Assignment type mismatch key8: smallint = int | 495 |
MTYP 4 Assignment type mismatch depkey1: smallint = int | 496 |
MTYP 4 Assignment type mismatch depkey2: smallint = int | 496 |
MTYP 4 Assignment type mismatch depkey3: smallint = int | 496 |
MTYP 4 Assignment type mismatch depkey4: smallint = int | 496 |
MTYP 4 Assignment type mismatch depkey5: smallint = int | 496 |
MTYP 4 Assignment type mismatch depkey6: smallint = int | 496 |
MTYP 4 Assignment type mismatch depkey7: smallint = int | 497 |
MTYP 4 Assignment type mismatch depkey8: smallint = int | 497 |
QTYP 4 Comparison type mismatch Comparison type mismatch: tinyint vs int | 189 |
QTYP 4 Comparison type mismatch Comparison type mismatch: tinyint vs int | 191 |
QTYP 4 Comparison type mismatch Comparison type mismatch: tinyint vs int | 212 |
QTYP 4 Comparison type mismatch Comparison type mismatch: tinyint vs int | 214 |
QTYP 4 Comparison type mismatch Comparison type mismatch: tinyint vs int | 237 |
QTYP 4 Comparison type mismatch Comparison type mismatch: tinyint vs int | 239 |
QTYP 4 Comparison type mismatch Comparison type mismatch: tinyint vs int | 262 |
QTYP 4 Comparison type mismatch Comparison type mismatch: tinyint vs int | 264 |
QTYP 4 Comparison type mismatch Comparison type mismatch: tinyint vs int | 287 |
QTYP 4 Comparison type mismatch Comparison type mismatch: tinyint vs int | 289 |
QTYP 4 Comparison type mismatch Comparison type mismatch: tinyint vs int | 312 |
QTYP 4 Comparison type mismatch Comparison type mismatch: tinyint vs int | 314 |
QTYP 4 Comparison type mismatch Comparison type mismatch: tinyint vs int | 337 |
QTYP 4 Comparison type mismatch Comparison type mismatch: tinyint vs int | 339 |
QTYP 4 Comparison type mismatch Comparison type mismatch: tinyint vs int | 362 |
QTYP 4 Comparison type mismatch Comparison type mismatch: tinyint vs int | 364 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 400 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 404 |
QTYP 4 Comparison type mismatch smallint = int | 404 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 405 |
QTYP 4 Comparison type mismatch smallint = int | 405 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 406 |
QTYP 4 Comparison type mismatch smallint = int | 406 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 407 |
QTYP 4 Comparison type mismatch smallint = int | 407 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 408 |
QTYP 4 Comparison type mismatch smallint = int | 408 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 409 |
QTYP 4 Comparison type mismatch smallint = int | 409 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 410 |
QTYP 4 Comparison type mismatch smallint = int | 410 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 411 |
QTYP 4 Comparison type mismatch smallint = int | 411 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 413 |
QTYP 4 Comparison type mismatch smallint = int | 413 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 414 |
QTYP 4 Comparison type mismatch smallint = int | 414 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 415 |
QTYP 4 Comparison type mismatch smallint = int | 415 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 416 |
QTYP 4 Comparison type mismatch smallint = int | 416 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 417 |
QTYP 4 Comparison type mismatch smallint = int | 417 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 418 |
QTYP 4 Comparison type mismatch smallint = int | 418 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 419 |
QTYP 4 Comparison type mismatch smallint = int | 419 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 420 |
QTYP 4 Comparison type mismatch smallint = int | 420 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 434 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 438 |
QTYP 4 Comparison type mismatch smallint = int | 438 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 439 |
QTYP 4 Comparison type mismatch smallint = int | 439 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 440 |
QTYP 4 Comparison type mismatch smallint = int | 440 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 441 |
QTYP 4 Comparison type mismatch smallint = int | 441 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 442 |
QTYP 4 Comparison type mismatch smallint = int | 442 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 443 |
QTYP 4 Comparison type mismatch smallint = int | 443 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 444 |
QTYP 4 Comparison type mismatch smallint = int | 444 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 445 |
QTYP 4 Comparison type mismatch smallint = int | 445 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 447 |
QTYP 4 Comparison type mismatch smallint = int | 447 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 448 |
QTYP 4 Comparison type mismatch smallint = int | 448 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 449 |
QTYP 4 Comparison type mismatch smallint = int | 449 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 450 |
QTYP 4 Comparison type mismatch smallint = int | 450 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 451 |
QTYP 4 Comparison type mismatch smallint = int | 451 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 452 |
QTYP 4 Comparison type mismatch smallint = int | 452 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 453 |
QTYP 4 Comparison type mismatch smallint = int | 453 |
QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int | 454 |
QTYP 4 Comparison type mismatch smallint = int | 454 |
TNOU 4 Table with no unique index master..spt_values | master..spt_values |
TNOU 4 Table with no unique index sybsystemprocs..syskeys | sybsystemprocs..syskeys |
MGTP 3 Grant to public master..spt_values | |
MGTP 3 Grant to public sybsystemprocs..sp_commonkey | |
MGTP 3 Grant to public sybsystemprocs..syscolumns | |
MGTP 3 Grant to public sybsystemprocs..syskeys | |
MGTP 3 Grant to public sybsystemprocs..sysobjects | |
MNER 3 No Error Check should check @@error after insert | 473 |
MNER 3 No Error Check should check @@error after insert | 490 |
MNER 3 No Error Check should check return value of exec | 529 |
MUCO 3 Useless Code Useless Brackets | 100 |
MUCO 3 Useless Code Useless Brackets | 111 |
MUCO 3 Useless Code Useless Brackets | 135 |
MUCO 3 Useless Code Useless Brackets | 148 |
MUCO 3 Useless Code Useless Brackets | 169 |
MUCO 3 Useless Code Useless Brackets | 175 |
MUCO 3 Useless Code Useless Brackets | 199 |
MUCO 3 Useless Code Useless Brackets | 222 |
MUCO 3 Useless Code Useless Brackets | 247 |
MUCO 3 Useless Code Useless Brackets | 272 |
MUCO 3 Useless Code Useless Brackets | 297 |
MUCO 3 Useless Code Useless Brackets | 322 |
MUCO 3 Useless Code Useless Brackets | 347 |
MUCO 3 Useless Code Useless Brackets | 372 |
MUCO 3 Useless Code Useless Brackets | 396 |
MUCO 3 Useless Code Useless Brackets | 424 |
MUCO 3 Useless Code Useless Brackets | 458 |
MUCO 3 Useless Code Useless Brackets | 500 |
MUCO 3 Useless Code Useless Brackets | 503 |
MUCO 3 Useless Code Useless Brackets | 510 |
MUCO 3 Useless Code Useless Brackets | 521 |
MUCO 3 Useless Code Useless Brackets | 532 |
QAFM 3 Var Assignment from potentially many rows | 181 |
QAFM 3 Var Assignment from potentially many rows | 204 |
QAFM 3 Var Assignment from potentially many rows | 229 |
QAFM 3 Var Assignment from potentially many rows | 254 |
QAFM 3 Var Assignment from potentially many rows | 279 |
QAFM 3 Var Assignment from potentially many rows | 304 |
QAFM 3 Var Assignment from potentially many rows | 329 |
QAFM 3 Var Assignment from potentially many rows | 354 |
QISO 3 Set isolation level | 87 |
QNAJ 3 Not using ANSI Inner Join | 182 |
QNAJ 3 Not using ANSI Inner Join | 205 |
QNAJ 3 Not using ANSI Inner Join | 230 |
QNAJ 3 Not using ANSI Inner Join | 255 |
QNAJ 3 Not using ANSI Inner Join | 280 |
QNAJ 3 Not using ANSI Inner Join | 305 |
QNAJ 3 Not using ANSI Inner Join | 330 |
QNAJ 3 Not using ANSI Inner Join | 355 |
QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: syscolumns.csyscolumns unique clustered (id, number, colid) Intersection: {id} | 184 |
QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: syscolumns.csyscolumns unique clustered (id, number, colid) Intersection: {id} | 186 |
QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: syscolumns.csyscolumns unique clustered (id, number, colid) Intersection: {id} | 207 |
QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: syscolumns.csyscolumns unique clustered (id, number, colid) Intersection: {id} | 209 |
QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: syscolumns.csyscolumns unique clustered (id, number, colid) Intersection: {id} | 232 |
QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: syscolumns.csyscolumns unique clustered (id, number, colid) Intersection: {id} | 234 |
QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: syscolumns.csyscolumns unique clustered (id, number, colid) Intersection: {id} | 257 |
QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: syscolumns.csyscolumns unique clustered (id, number, colid) Intersection: {id} | 259 |
QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: syscolumns.csyscolumns unique clustered (id, number, colid) Intersection: {id} | 282 |
QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: syscolumns.csyscolumns unique clustered (id, number, colid) Intersection: {id} | 284 |
QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: syscolumns.csyscolumns unique clustered (id, number, colid) Intersection: {id} | 307 |
QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: syscolumns.csyscolumns unique clustered (id, number, colid) Intersection: {id} | 309 |
QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: syscolumns.csyscolumns unique clustered (id, number, colid) Intersection: {id} | 332 |
QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: syscolumns.csyscolumns unique clustered (id, number, colid) Intersection: {id} | 334 |
QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: syscolumns.csyscolumns unique clustered (id, number, colid) Intersection: {id} | 357 |
QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: syscolumns.csyscolumns unique clustered (id, number, colid) Intersection: {id} | 359 |
QSWV 3 Sarg with variable @cnt, Candidate Index: syskeys.csyskeys clustered(id) S | 402 |
QSWV 3 Sarg with variable @key1a, Candidate Index: syskeys.csyskeys clustered(id) S | 404 |
QSWV 3 Sarg with variable @key2a, Candidate Index: syskeys.csyskeys clustered(id) S | 405 |
QSWV 3 Sarg with variable @key3a, Candidate Index: syskeys.csyskeys clustered(id) S | 406 |
QSWV 3 Sarg with variable @key4a, Candidate Index: syskeys.csyskeys clustered(id) S | 407 |
QSWV 3 Sarg with variable @key5a, Candidate Index: syskeys.csyskeys clustered(id) S | 408 |
QSWV 3 Sarg with variable @key6a, Candidate Index: syskeys.csyskeys clustered(id) S | 409 |
QSWV 3 Sarg with variable @key7a, Candidate Index: syskeys.csyskeys clustered(id) S | 410 |
QSWV 3 Sarg with variable @key8a, Candidate Index: syskeys.csyskeys clustered(id) S | 411 |
QSWV 3 Sarg with variable @key1b, Candidate Index: syskeys.csyskeys clustered(id) S | 413 |
QSWV 3 Sarg with variable @key2b, Candidate Index: syskeys.csyskeys clustered(id) S | 414 |
QSWV 3 Sarg with variable @key3b, Candidate Index: syskeys.csyskeys clustered(id) S | 415 |
QSWV 3 Sarg with variable @key4b, Candidate Index: syskeys.csyskeys clustered(id) S | 416 |
QSWV 3 Sarg with variable @key5b, Candidate Index: syskeys.csyskeys clustered(id) S | 417 |
QSWV 3 Sarg with variable @key6b, Candidate Index: syskeys.csyskeys clustered(id) S | 418 |
QSWV 3 Sarg with variable @key7b, Candidate Index: syskeys.csyskeys clustered(id) S | 419 |
QSWV 3 Sarg with variable @key8b, Candidate Index: syskeys.csyskeys clustered(id) S | 420 |
QSWV 3 Sarg with variable @cnt, Candidate Index: syskeys.csyskeys clustered(id) S | 436 |
QSWV 3 Sarg with variable @key1b, Candidate Index: syskeys.csyskeys clustered(id) S | 438 |
QSWV 3 Sarg with variable @key2b, Candidate Index: syskeys.csyskeys clustered(id) S | 439 |
QSWV 3 Sarg with variable @key3b, Candidate Index: syskeys.csyskeys clustered(id) S | 440 |
QSWV 3 Sarg with variable @key4b, Candidate Index: syskeys.csyskeys clustered(id) S | 441 |
QSWV 3 Sarg with variable @key5b, Candidate Index: syskeys.csyskeys clustered(id) S | 442 |
QSWV 3 Sarg with variable @key6b, Candidate Index: syskeys.csyskeys clustered(id) S | 443 |
QSWV 3 Sarg with variable @key7b, Candidate Index: syskeys.csyskeys clustered(id) S | 444 |
QSWV 3 Sarg with variable @key8b, Candidate Index: syskeys.csyskeys clustered(id) S | 445 |
QSWV 3 Sarg with variable @key1a, Candidate Index: syskeys.csyskeys clustered(id) S | 447 |
QSWV 3 Sarg with variable @key2a, Candidate Index: syskeys.csyskeys clustered(id) S | 448 |
QSWV 3 Sarg with variable @key3a, Candidate Index: syskeys.csyskeys clustered(id) S | 449 |
QSWV 3 Sarg with variable @key4a, Candidate Index: syskeys.csyskeys clustered(id) S | 450 |
QSWV 3 Sarg with variable @key5a, Candidate Index: syskeys.csyskeys clustered(id) S | 451 |
QSWV 3 Sarg with variable @key6a, Candidate Index: syskeys.csyskeys clustered(id) S | 452 |
QSWV 3 Sarg with variable @key7a, Candidate Index: syskeys.csyskeys clustered(id) S | 453 |
QSWV 3 Sarg with variable @key8a, Candidate Index: syskeys.csyskeys clustered(id) S | 454 |
MSUB 2 Subquery Marker | 121 |
MSUB 2 Subquery Marker | 137 |
MSUB 2 Subquery Marker | 398 |
MSUB 2 Subquery Marker | 432 |
MTR1 2 Metrics: Comments Ratio Comments: 38% | 36 |
MTR2 2 Metrics: Cyclomatic Complexity Cyclo: 130 = 146dec - 18exi + 2 | 36 |
MTR3 2 Metrics: Query Complexity Complexity: 313 | 36 |
PRED_QUERY_COLLECTION 2 {c=sybsystemprocs..syscolumns, c2=sybsystemprocs..syscolumns, sv=master..spt_values, sv2=master..spt_values} 0 | 181 |
PRED_QUERY_COLLECTION 2 {c=sybsystemprocs..syscolumns, c2=sybsystemprocs..syscolumns, sv=master..spt_values, sv2=master..spt_values} 0 | 204 |
PRED_QUERY_COLLECTION 2 {c=sybsystemprocs..syscolumns, c2=sybsystemprocs..syscolumns, sv=master..spt_values, sv2=master..spt_values} 0 | 229 |
PRED_QUERY_COLLECTION 2 {c=sybsystemprocs..syscolumns, c2=sybsystemprocs..syscolumns, sv=master..spt_values, sv2=master..spt_values} 0 | 254 |
PRED_QUERY_COLLECTION 2 {c=sybsystemprocs..syscolumns, c2=sybsystemprocs..syscolumns, sv=master..spt_values, sv2=master..spt_values} 0 | 279 |
PRED_QUERY_COLLECTION 2 {c=sybsystemprocs..syscolumns, c2=sybsystemprocs..syscolumns, sv=master..spt_values, sv2=master..spt_values} 0 | 304 |
PRED_QUERY_COLLECTION 2 {c=sybsystemprocs..syscolumns, c2=sybsystemprocs..syscolumns, sv=master..spt_values, sv2=master..spt_values} 0 | 329 |
PRED_QUERY_COLLECTION 2 {c=sybsystemprocs..syscolumns, c2=sybsystemprocs..syscolumns, sv=master..spt_values, sv2=master..spt_values} 0 | 354 |
DEPENDENCIES |
PROCS AND TABLES USED read_writes table sybsystemprocs..syskeys reads table sybsystemprocs..sysobjects calls proc sybsystemprocs..sp_getmessage reads table sybsystemprocs..sysusermessages reads table master..sysmessages (1) reads table master..syslanguages (1) calls proc sybsystemprocs..sp_validlang reads table master..syslanguages (1) reads table master..spt_values (1) reads table sybsystemprocs..syscolumns |