'***************************************************************************** '文件:CheckCode4SqlServer.vbs '版本:1.0 '功能:遍历物理模型中的所有表,检查表代码、字段代码 ' 是否包含空格、是否包含中文、是否为系统关键字、是否长度超过116 '用法:打开物理模型,运行本脚本(Ctrl+Shift+X) '备注: '***************************************************************************** dim model 'current model set model = ActiveModel If (model Is Nothing) Then MsgBox "没有选择模型,请选择一个模型并打开." ElseIf Not model.IsKindOf(PdPDM.cls_Model) Then MsgBox "当前选择的不是一个物理模型(PDM)." Else ProcessTables model End If '***************************************************************************** '过程:ProcessTables '功能:递归遍历所有的表 '***************************************************************************** sub ProcessTables(folder) '处理模型中的表 dim table for each table in folder.tables if not table.IsShortCut then on error resume next '检查表名中是否有特殊字符、是否为关键字 Check table.code, "" Dim col for each col in table.Columns '检查字段名中是否有特殊字符、是否为关键字 Check col.code, table.code next end if next '对子目录进行递归 dim subFolder for each subFolder in folder.Packages ProcessTables subFolder next end sub '***************************************************************************** '过程:Check '功能:检查表名 或 字段名 '***************************************************************************** sub Check(str, tableCode) dim outStr if len(tableCode) > 0 then outStr = "字段名 " & tableCode & "." else outStr = "表名 " end if '检查表明是否含有特殊字符 if InStr(str, " ") then outStr = outStr & str & " 包含空格" Output outStr end if '是否包含中文 if HasChinese(str) then outStr = outStr & str & " 包含中文" Output outStr end if '检测系统关键字 dim arr arr = array("ADD","EXTERNAL","PROCEDURE","ALL","FETCH","PUBLIC","ALTER","FILE","RAISERROR","AND","FILLFACTOR","READ","ANY","FOR","READTEXT","AS","FOREIGN","RECONFIGURE","ASC","FREETEXT","REFERENCES","AUTHORIZATION","FREETEXTTABLE","REPLICATION","BACKUP","RESTORE","BEGIN","FULL","RESTRICT","BETWEEN","FUNCTION","RETURN","BREAK","GOTO","REVERT","BROWSE","GRANT","REVOKE","BULK","GROUP","RIGHT","BY","HAVING","ROLLBACK","CASCADE","HOLDLOCK","ROWCOUNT","CASE","IDENTITY","ROWGUIDCOL","CHECK","IDENTITY_INSERT","RULE","CHECKPOINT","IDENTITYCOL","SAVE","CLOSE","IF","SCHEMA","CLUSTERED","IN","SECURITYAUDIT","COALESCE","INDEX","SELECT","COLLATE","INNER","SEMANTICKEYPHRASETABLE","COLUMN","INSERT","SEMANTICSIMILARITYDETAILSTABLE","COMMIT","INTERSECT","SEMANTICSIMILARITYTABLE","COMPUTE","INTO","SESSION_USER","CONSTRAINT","IS","SET","CONTAINS","JOIN","SETUSER","CONTAINSTABLE","KEY","SHUTDOWN","CONTINUE","KILL","SOME","CONVERT","LEFT","STATISTICS","CREATE","LIKE","SYSTEM_USER","CROSS","LINENO","TABLE","CURRENT","LOAD","TABLESAMPLE","CURRENT_DATE","MERGE","TEXTSIZE","CURRENT_TIME","NATIONAL","THEN","CURRENT_TIMESTAMP","NOCHECK","CURRENT_USER","NONCLUSTERED","TOP","CURSOR","NOT","TRAN","DATABASE","NULL","TRANSACTION","DBCC","NULLIF","TRIGGER","DEALLOCATE","OF","TRUNCATE","DECLARE","OFF","TRY_CONVERT","DEFAULT","OFFSETS","TSEQUAL","DELETE","ON","UNION","DENY","OPEN","UNIQUE","DESC","OPENDATASOURCE","UNPIVOT","DISK","OPENQUERY","UPDATE","DISTINCT","OPENROWSET","UPDATETEXT","DISTRIBUTED","OPENXML","USE","DOUBLE","OPTION","USER","DROP","OR","VALUES","DUMP","ORDER","VARYING","ELSE","OUTER","VIEW","END","OVER","WAITFOR","ERRLVL","PERCENT","WHEN","ESCAPE","PIVOT","WHERE","EXCEPT","PLAN","WHILE","EXEC","PRECISION","WITH","EXECUTE","PRIMARY","WITHIN GROUP","EXISTS","PRINT","WRITETEXT","EXIT","PROC") for each keyword in arr if UCase(str) = keyword then outStr = outStr & str & " 为系统关键字" Output outStr end if next '字符串长度是否超出限制 if Len(str) >= 116 then outStr = outStr & str & " 命名的长度不应超过116" Output outStr end if end sub '***************************************************************************** '函数:HasChinese '功能:是否包含中文 '***************************************************************************** function HasChinese(str) HasChinese = false dim i for i=1 to Len(str) if Asc(Mid(str,i,1)) < 0 then HasChinese = true exit for end if next end function