我有一个由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中,
''
是NULL
s。这些在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不会。这是转换的必要部分