如何处理SQL server中的' || chr(38) || '



我有一个由Oracle返回的SQL脚本,这个输出脚本需要在SQL服务器中运行。我知道这听起来很奇怪,但我们正在从Oracle迁移到SQL server。问题是这个脚本中很少有像

这样的语句
insert into media values('Mumbai','C123','MP3','Gully ' || chr(38) || ' Gang','','');

当在SQL server中尝试上述语句时,会抛出错误:

Incorrect syntax near '|'.

如何解决这个问题?

我试过set define on/off,但是没有用。

感谢

想必您想:

insert into media
values('Mumbai', 'C123', 'MP3',
concat('Gully ', char(38), ' Gang'), '', '');

一些评论:

  • 为什么不直接用'Gully & Gang'?至少在我的键盘上,&很容易输入。
  • 在Oracle中,''NULLs。这些在SQL Server中是不同的。不清楚你想要哪个,但我可能会猜NULL
  • 显式列出insert上的列。这是最好的做法。

在SQL Server中使用'+'代替'||'

insert into media values('Mumbai','C123','MP3','Gully ' + char(38) + ' Gang','','');

所有表达式最好是字符串类型。

当从Oracle转换到SQL Server时,您应该使用(或手边有参考)SQL Server迁移助手for Oracle,它将为您翻译该语句

INSERT MEDIA(
NAME, 
A, 
B, 
C, 
D, 
E)
VALUES (
'Mumbai', 
'C123', 
'MP3', 
'Gully ' + ISNULL(char(38), '') + ' Gang', 
NULL, 
NULL)
GO

Oracle将''静默转换为NULL,而SQL Server不会。这是转换的必要部分

最新更新