SqlSQLServerEnum.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. package jnpf.database.sql.enums;
  2. import jnpf.database.enums.DbAliasEnum;
  3. import jnpf.database.enums.ParamEnum;
  4. import jnpf.database.source.DbBase;
  5. import jnpf.database.sql.enums.base.SqlFrameBase;
  6. import jnpf.database.sql.model.DbStruct;
  7. import lombok.AllArgsConstructor;
  8. import lombok.Getter;
  9. import java.util.List;
  10. import java.util.Map;
  11. /**
  12. * SqlServer SQL语句模板
  13. *
  14. * @author JNPF开发平台组 YanYu
  15. * @version V3.3
  16. * @copyright 引迈信息技术有限公司
  17. * @date 2022/3/30
  18. */
  19. @Getter
  20. @AllArgsConstructor
  21. public enum SqlSQLServerEnum implements SqlFrameBase {
  22. /* =============================== 系统语句 ==================================== */
  23. FIELDS("SELECT cast(a.name as varchar(50)) "+ DbAliasEnum.FIELD.getAlias()+" ," +
  24. " cast(case when exists(SELECT 1 FROM sysobjects where xtype='PK' and name in ( " +
  25. " SELECT name FROM sysindexes WHERE indid in( " +
  26. " SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid ))) " +
  27. " then '1' else '0' end as varchar(50)) "+ DbAliasEnum.PRIMARY_KEY.getAlias() +", " +
  28. " cast(b.name as varchar(50)) "+ DbAliasEnum.DATA_TYPE.getAlias() +", " +
  29. // " cast(COLUMNPROPERTY(a.id,a.name,'PRECISION') as varchar(50)) " + DbAliasConst.DATA_LENGTH + ", " +
  30. " a.length " + DbAliasEnum.CHAR_LENGTH.getAlias() + ", " +
  31. " a.xprec " + DbAliasEnum.NUM_PRECISION.getAlias() + ", " +
  32. " a.xscale " + DbAliasEnum.NUM_SCALE.getAlias() + ", " +
  33. " h.is_identity " + DbAliasEnum.IS_IDENTITY.getAlias() + ", " +
  34. " cast(case when a.isnullable=0 then '0'else '1' end as varchar(50)) "+ DbAliasEnum.ALLOW_NULL.getAlias() +", " +
  35. " cast(isnull(e.text,'') as varchar(50)) " + DbAliasEnum.DEFAULT_VALUE.getAlias() +", " +
  36. " cast(isnull(g.[value],'') as varchar(50)) " + DbAliasEnum.FIELD_COMMENT.getAlias() +
  37. "\nFROM syscolumns a " +
  38. "left join systypes b on a.xusertype=b.xusertype " +
  39. "inner join sysobjects d on a.id=d.id and (d.xtype='U' or d.xtype='V') and d.name<>'dtproperties' " +
  40. "left join syscomments e on a.cdefault=e.id " +
  41. "left join sys.extended_properties g on a.id=g.major_id and a.colid=g.minor_id " +
  42. "left join sys.extended_properties f on d.id=f.major_id and f.minor_id=0 " +
  43. "left join sys.columns h ON d.id= h.object_id and a.name = h.name " +
  44. "where d.name = " + ParamEnum.DB_NAME.getParamSign() +
  45. "\norder by a.id,a.colorder"
  46. ){
  47. @Override
  48. public void setStructParams(String table, DbStruct dbStruct, List<String> list) {
  49. list.add(table);
  50. }
  51. },
  52. TABLES(
  53. "SET NOCOUNT ON DECLARE\n" +
  54. "@TABLEINFO TABLE (\n" +
  55. "\tNAME VARCHAR ( 50 ),\n" +
  56. "\tSUMROWS VARCHAR ( 11 ),\n" +
  57. "\tRESERVED VARCHAR ( 50 ),\n" +
  58. "\tDATA VARCHAR ( 50 ),\n" +
  59. "\tINDEX_SIZE VARCHAR ( 50 ),\n" +
  60. "\tUNUSED VARCHAR ( 50 ),\n" +
  61. "\tPK VARCHAR ( 50 ) \n" +
  62. ") DECLARE\n" +
  63. "@TABLENAME TABLE ( NAME VARCHAR ( 50 ) ) DECLARE\n" +
  64. "@NAME VARCHAR ( 50 ) DECLARE\n" +
  65. "@PK VARCHAR ( 50 ) INSERT INTO @TABLENAME ( NAME ) SELECT\n" +
  66. "O.NAME \n" +
  67. "FROM\n" +
  68. "\tsysobjects O,\n" +
  69. "\tsysindexes I \n" +
  70. "WHERE\n" +
  71. "\tO.ID = I.ID \n" +
  72. "\tAND O.XTYPE = 'U' \n" +
  73. "\tAND I.INDID < 2 \n" +
  74. "\tAND O.UID = (SELECT schema_id FROM sys.schemas where name = " + ParamEnum.DB_SCHEMA.getParamSign() + ")\n" +
  75. "ORDER BY\n" +
  76. "\tI.ROWS DESC,\n" +
  77. "\tO.NAME\n" +
  78. "WHILE\n" +
  79. "\t\tEXISTS ( SELECT 1 FROM @TABLENAME ) BEGIN\n" +
  80. "\t\tSELECT TOP\n" +
  81. "\t\t\t1 @NAME = NAME \n" +
  82. "\t\tFROM\n" +
  83. "\t\t\t@TABLENAME DELETE @TABLENAME \n" +
  84. "\t\tWHERE\n" +
  85. "\t\t\tNAME = @NAME DECLARE\n" +
  86. "\t\t\t@OBJECTID INT \n" +
  87. "\t\t\tSET @OBJECTID = OBJECT_ID( @NAME ) SELECT\n" +
  88. "\t\t\t@PK = COL_NAME( @OBJECTID, COLID ) \n" +
  89. "\t\tFROM\n" +
  90. "\t\t\tsysobjects AS O\n" +
  91. "\t\t\tINNER JOIN sysindexes AS I ON I.NAME = O.NAME\n" +
  92. "\t\t\tINNER JOIN sysindexkeys AS K ON K.INDID = I.INDID \n" +
  93. "\t\tWHERE\n" +
  94. "\t\t\tO.XTYPE = 'PK' \n" +
  95. "\t\t\tAND PARENT_OBJ = @OBJECTID \n" +
  96. "\t\t\tAND K.ID = @OBJECTID INSERT INTO @TABLEINFO ( NAME, SUMROWS, RESERVED, DATA, INDEX_SIZE, UNUSED ) EXEC sys.sp_spaceused @NAME UPDATE @TABLEINFO \n" +
  97. "\t\t\tSET PK = @PK \n" +
  98. "\t\tWHERE\n" +
  99. "\t\t\tNAME = @NAME \n" +
  100. "\tEND SELECT CAST\n" +
  101. "\t\t( F.NAME AS VARCHAR ( 50 ) ) " + DbAliasEnum.TABLE_NAME.getAlias() + ",\n" +
  102. "\t\tCAST ( ISNULL( P.TDESCRIPTION, F.NAME ) AS VARCHAR ( 50 ) ) " + DbAliasEnum.TABLE_COMMENT.getAlias() + ",\n" +
  103. "\t\tCAST ( F.RESERVED AS VARCHAR ( 50 ) ) " + DbAliasEnum.TABLE_SIZE.getAlias() + ",\n" +
  104. "\t\tCAST ( RTRIM( F.SUMROWS ) AS VARCHAR ( 50 ) ) " + DbAliasEnum.TABLE_SUM.getAlias() + ",\n" +
  105. "\t\tCAST ( F.PK AS VARCHAR ( 50 ) ) " + DbAliasEnum.PRIMARY_KEY.getAlias() + " \n" +
  106. "\tFROM\n" +
  107. "\t\t@TABLEINFO F\n" +
  108. "\t\tLEFT JOIN (\n" +
  109. "\t\tSELECT\n" +
  110. "\t\t\tNAME =\n" +
  111. "\t\tCASE\n" +
  112. "\t\t\t\t\n" +
  113. "\t\t\t\tWHEN A.COLORDER = 1 THEN\n" +
  114. "\t\t\t\tD.NAME ELSE '' \n" +
  115. "\t\t\tEND,\n" +
  116. "\t\t\tTDESCRIPTION =\n" +
  117. "\t\tCASE\n" +
  118. "\t\t\t\t\n" +
  119. "\t\t\t\tWHEN A.COLORDER = 1 THEN\n" +
  120. "\t\t\t\tISNULL( F.VALUE, '' ) ELSE '' \n" +
  121. "\t\t\tEND \n" +
  122. "\t\t\tFROM\n" +
  123. "\t\t\t\tsyscolumns A\n" +
  124. "\t\t\t\tLEFT JOIN systypes B ON A.XUSERTYPE = B.XUSERTYPE\n" +
  125. "\t\t\t\tINNER JOIN sysobjects D ON A.ID = D.ID \n" +
  126. "\t\t\t\tAND D.XTYPE = 'U' \n" +
  127. "\t\t\t\tAND D.NAME <> 'DTPROPERTIES'\n" +
  128. "\t\t\t\tLEFT JOIN sys.extended_properties F ON D.ID = F.MAJOR_ID \n" +
  129. "\t\t\tWHERE\n" +
  130. "\t\t\t\tA.COLORDER = 1 \n" +
  131. "\t\t\t\tAND F.MINOR_ID = 0 \n" +
  132. "\t\t\t) P ON F.NAME = P.NAME \n" +
  133. "\t\tWHERE\n" +
  134. "\t\t\t1 = 1 \n" +
  135. "\tORDER BY\n" +
  136. "\t" + DbAliasEnum.TABLE_NAME.getAlias()
  137. ){
  138. @Override
  139. public void setStructParams(String table, DbStruct dbStruct, List<String> list) {
  140. list.add(dbStruct.getSqlServerDbSchema());
  141. }
  142. },
  143. TABLESANDVIEW(
  144. "SELECT s.Name as " + DbAliasEnum.TABLE_NAME.getAlias()
  145. + ",Convert(varchar(max),tbp.value) as " + DbAliasEnum.TABLE_COMMENT.getAlias()
  146. + ",s.type as " + DbAliasEnum.TABLE_TYPE.getAlias()
  147. + "\nFROM sysobjects s\n" +
  148. "LEFT JOIN sys.extended_properties as tbp ON s.id=tbp.major_id and tbp.minor_id=0 AND (tbp.Name='MS_Description' OR tbp.Name is null) WHERE s.xtype IN('V','U')"
  149. ){
  150. @Override
  151. public void setStructParams(String table, DbStruct dbStruct, List<String> list) {
  152. list.add(dbStruct.getSqlServerDbSchema());
  153. }
  154. },
  155. TABLE(
  156. TABLES.sqlFrame.replace("1 = 1", "F.NAME = " + ParamEnum.TABLE.getParamSign())
  157. ){
  158. @Override
  159. public void setStructParams(String table, DbStruct dbStruct, List<String> list) {
  160. list.add(dbStruct.getSqlServerDbSchema());
  161. list.add(table);
  162. }
  163. },
  164. EXISTS_TABLE(
  165. "SELECT COUNT (*) AS TOTAL FROM (" +
  166. "SELECT table_name FROM INFORMATION_SCHEMA.TABLES where table_type = 'BASE TABLE' and TABLE_NAME = "+ ParamEnum.TABLE.getParamSign()
  167. + ") AS COUNT_TAB"
  168. ){
  169. @Override
  170. public void setStructParams(String table, DbStruct dbStruct, List<String> list) {
  171. list.add(table);
  172. }
  173. },
  174. /* =============================== 定义语句 ==================================== */
  175. CREATE_TABLE(SqlDMEnum.CREATE_TABLE.getSqlFrame()){
  176. @Override
  177. public String createIncrement(String sqlFrame, Map<String, String> paramsMap) {
  178. return SqlDMEnum.CREATE_TABLE.createIncrement(sqlFrame, paramsMap);
  179. }
  180. },
  181. // (Data Definition Language)简称 DDL:用来建立数据库、数据库对象和定义列的命令。包括:create、alter、drop
  182. RE_TABLE_NAME ("EXEC sp_rename {oldTable}, {newTable}"),
  183. COMMENT_TABLE ("EXEC sp_addextendedproperty 'MS_Description',N'{comment}','SCHEMA',N'dbo','TABLE',N'{table}'"),
  184. COMMENT_COLUMN ("EXEC sp_addextendedproperty 'MS_Description',N'{comment}','SCHEMA',N'dbo','TABLE',N'{table}','COLUMN',N'{column}'"),
  185. ALTER_COLUMN ("<ALTER> <TABLE> {table} <ADD> {column} {dataType} [[NOT] [NULL]] [<DEFAULT> {defaultValue}]"),
  186. /* =============================== DML操作语句 ==================================== */
  187. // (Data Manipulation Language)简称 DML:用来操纵数据库中数据的命令。包括:select、insert、update、delete。
  188. /*第二种方式:offset fetch next方式(SQL2012以上的版本才支持:推荐使用 )-*/
  189. SELECT_PAGE_NEW ("{selectSql} [orderSql] OFFSET {beginIndex} rows fetch next {pageSize} rows only"),
  190. /*
  191. row_number() over(order by {column})
  192. row_number() over(order by RAND()) 随机字段
  193. row_number() over(order by NEWID()) 临时ID
  194. */
  195. ORDER_PAGE ("SELECT * " +
  196. "FROM " +
  197. "(SELECT TOP {endIndex} ROW_NUMBER() OVER(ORDER BY {orderColumn}) JNPF_ROW,* " +
  198. "FROM " +
  199. "({selectSql}) AS JNPF_TAB ORDER BY JNPF_ROW) AS JNPF_TEMP_TABLE " +
  200. "WHERE " +
  201. "JNPF_ROW BETWEEN ({beginIndex}+1) AND {endIndex}"),
  202. // offset /fetch next关键字 2012版本及以上才有
  203. ORDER_PAGE2 (
  204. "SELECT \n" +
  205. "\t*\n" +
  206. "FROM\n" +
  207. "\t({selectSql}) AS JNPF_TAB \n" +
  208. "ORDER BY\n" +
  209. "\t{orderColumn} \n" +
  210. "OFFSET {beginIndex} ROWS FETCH NEXT {pageSize} ROWS ONLY"
  211. ),
  212. DB_TIME_SQL ("Select CONVERT(varchar(100), GETDATE(), 120) as TIME"),
  213. /* =============================== 其他 ==================================== */
  214. ;
  215. public String sqlFrame;
  216. private final String dbEncode = DbBase.SQL_SERVER;
  217. }