# KSQL规范

### 时间常量

#### 语法

| 格式                       | 含义   |
| -------------------------- | ------ |
| {d 'yyyy-mm-dd'}           | 日期   |
| {t 'hh:mm:ss'}             | 时间   |
| {ts 'yyyy-mm-dd hh:mm:ss'} | 时间戳 |

#### 注释

- 时间戳的日期和时间之间只允许出现一个空格分隔符号。
- 时间中不支持毫秒。

#### 示例：

- 时间戳:{ts'2002-07-17 10:51:18'}
- 日期:{d'2002-07-17'}
- 时间:{t'10:51:18'}

### update

#### 语法

```
upd_sta ::= UPDATE db_nam [ . tab_nam ] SET set_lis [ WHERE sc_sta ]
set_lis ::= db_nam [ [ . tab_nam ] . col_nam ] = upd_src
upd_src ::= NULL
    | DEFAULT
    | val_exp
```

#### 注释

1. 遵循从严原则
2. 类似oracle语法，简单的sqlserver关联语法

示例：

```sql
UPDATE a SET (p, q) = (SELECT p, q FROM b WHERE fid = a.fid)
WHERE EXISTS (SELECT 1 FROM b WHERE fid = a.fid);

UPDATE T_BAS_SYSPARAMETER A
SET FID = (SELECT FID FROM TMP_SYSPARAM WHERE FORGID = A.FORGID)
WHERE EXISTS (SELECT 1 FROM TMP_SYSPARAM WHERE FORGID = A.FORGID);

UPDATE T_SD_SaleContractEntry
SET (FTotalOrderedAmt, FTotalOrderedQty) =
(SELECT temp.FTotalOrderedAmt, temp.FTotalOrderedQty  FROM TABLE temp
 WHERE EXISTS(SELECT 1 FROM IDTABLE idtemp 
             WHERE idtemp.FEntryID = temp.FSourceBillEntryId
             AND idtemp.FDstID IN (?)) 
 AND T_SD_SaleContractEntry.FID=temp.FSourceBillEntryId);
```
### 系统表

```sql
KSQL_USERTABLES  用户表
Select KSQL_TABLENAME from KSQL_USERTABLES;

KSQL_USERCLUMN   列表
Select KSQL_COL_NAME, KSQL_COL_TABNAME,KSQL_USERDEFAULT from KSQL_USERCLUMN;

KSQL_INDEXES     索引表
Select KSQL_INDNAME from KSQL_INDEXES;

KSQL_CONSTRAINTS 约束表
Select KSQL_CONS_NAME, KSQL_CONS_TABNAME, KSQL_CONS_TYPE from KSQL_CONSTRAINTS;
```

