Как сделать запись в SAP ASE Sybase 16?

Я буквально следую первому примеру документации SAP по UPSERT записи в ASE:https://help.sap.com/viewer/cbed2190ee2d4486b0bbe0e75bf4b636/16.0.3.2/en-US/faf583d9adc547ad8a164bb3f41ea6cd.html

      1> select @@version
2> go
Adaptive Server Enterprise/16.0 SP03 PL06/EBF 28334 SMP/P/x86_64/SLES 11.1/ase1
60sp03pl06x/3457/64-bit/FBO/Mon Nov 26 04:33:30 2018
(1 row affected)

1> select * from t1
2> go
 a           b           c
 ----------- ----------- -----------
           1           2           3
(1 row affected)

1> upsert t1(a,b,c) values(1,2,3)
2> go
Msg 102, Level 15, State 181:
Server 'NPL', Line 1:
Incorrect syntax near 'a'.

Кто-нибудь знает, почему я получаю эту ошибку «Неверный синтаксис» в статусе UPSERT? Спасибо

2 ответа

Если единственной целью является реализация возможностей в ASEтогда то, что вы хотите посмотреть, это команда слияния .

Если намерение состоит в том, чтобы использовать (подмножество) HANA (в данном случае команду) для какого-либо требования к совместимости и иметь в виду, что вам может потребоваться изменить существующий код для работы с двойными (и несовместимыми) синтаксическими анализаторами, тогда ...


Чтобы использовать (ограниченную версию) HANA в ASE, вам сначала нужно создать базу данных, которая поддерживает SQLScriptпарсер (см. Создание базы данных SQLScript ), например:

      use master
go
create database sqlscript_db
    on data_01=10
log on log_01=5
for sqlscript                  -- enable use of SQLScript parser
go

Бег sp_helpdb(из базы данных, отличной от SQLScript), чтобы проверить статус базы данных:

      use master
go
sp_helpdb sqlscript_db
go

 name         db_size       owner dbid created      durability lobcomplvl inrowlen status
 ------------ ------------- ----- ---- ------------ ---------- ---------- -------- ---------
 sqlscript_db       15.0 MB sa       7 Mar 25, 2022 full                0     NULL sqlscript
... snip ...                                                                       ^^^^^^^^^

Теперь вы должны быть в состоянии использовать upsertоператор в этой новой базе данных:

      use sqlscript_db
go
create table t1 (a int, b int, c int)
go
upsert t1(a,b,c) values(1,2,3)
go
(1 row affected)

select * from t1
go

 a           b           c
 ----------- ----------- -----------
           1           2           3

ПРИМЕЧАНИЕ: проверено на ASE 16.0 SP04 GA


Проверка SQLScript/upsertне работает в базе данных, отличной от SQLScript:

      use tempdb
go
create table t1 (a int, b int, c int)
go
upsert t1(a,b,c) values(1,1,1)
go

Msg 102, Level 15, State 181:
Server 'ASE400', Line 1:
Incorrect syntax near 'a'.

если ваш уникальный ключ, скажем, t1.a, то вы можете использовать следующую логику:

      merge into t1 as dest
using (select 1 a, 2 b, 3 c) as src
on dest.a = src.a
when not matched then
  insert (a,b,c) values(src.a,src.b,src.c)
when matched then
  update set b=src.b, c=src.c
Другие вопросы по тегам