如何在SAP ASE Sybase 16中升级记录



我直接遵循SAP文档关于ASE中的UPSERT记录的第一个示例: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统计中的错误?感谢

如果唯一的目的是在ASE中实现upsert功能,那么您想要查看的是merge命令。

如果目的是利用HANA的SQLScript(在本例中为upsert命令(的(子集(来满足某种互操作性要求,请记住,您可能需要修改现有代码以使用双(和不兼容(解析器,那么。。。


要在ASE中使用HANA的SQLScript(有限版本(,首先需要创建一个支持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

相关内容

  • 没有找到相关文章

最新更新