MSSQL 'REPLACE' 附近的语法不正确
Incorrect syntax near 'REPLACE' with MSSQL
我已经通过 liquibase 将 oracle 数据库迁移到 Microsoft SQL 服务器,但仍然有一些 SQL 语句不起作用。这个在 oracle 中看起来像这样:
CREATE OR REPLACE VIEW "BP_RESULTS_VIEW" (
BP_ID,
RES_NAME,
RES_LONG_NAME,
MEDIAN,
LOW_HINGE,
HIGH_HINGE,
H_SPREAD,
INNER_FENCE_LOW,
INNER_FENCE_HIGH,
OUTER_FENCE_LOW,
OUTER_FENCE_HIGH,
LOW_NOTCH,
HIGH_NOTCH,
LOW_ADJACENT_VALUE,
HIGH_ADJACENT_VALUE)
AS
SELECT
r.BP_ID,
rv.RES_NAME,
rv.RES_LONG_NAME,
r.MEDIAN,
r.LOW_HINGE,
r.HIGH_HINGE,
r.H_SPREAD,
r.INNER_FENCE_LOW,
r.INNER_FENCE_HIGH,
r.OUTER_FENCE_LOW,
r.OUTER_FENCE_HIGH,
r.LOW_NOTCH,
r.HIGH_NOTCH,
r.LOW_ADJACENT_VALUE,
r.HIGH_ADJACENT_VALUE
FROM
bp_results r,
results_view_display rv
WHERE
CAST (rv.value AS INT) = r.bp_id AND
rv.type = 'BOX';
将其迁移到 Microsoft SQL 服务器后,它看起来像这样:
CREATE OR REPLACE FORCE VIEW BP_RESULTS_VIEW (BP_ID, RES_NAME, RES_LONG_NAME, MEDIAN,
LOW_HINGE, HIGH_HINGE, H_SPREAD, INNER_FENCE_LOW, INNER_FENCE_HIGH,
OUTER_FENCE_LOW, OUTER_FENCE_HIGH, LOW_NOTCH, HIGH_NOTCH,
LOW_ADJACENT_VALUE, HIGH_ADJACENT_VALUE) AS SELECT
r.BP_ID,
rv.RES_NAME,
rv.RES_LONG_NAME,
r.MEDIAN,
r.LOW_HINGE,
r.HIGH_HINGE,
r.H_SPREAD,
r.INNER_FENCE_LOW,
r.INNER_FENCE_HIGH,
r.OUTER_FENCE_LOW,
r.OUTER_FENCE_HIGH,
r.LOW_NOTCH,
r.HIGH_NOTCH,
r.LOW_ADJACENT_VALUE,
r.HIGH_ADJACENT_VALUE
FROM
bp_results r,
results_view_display rv
WHERE
CAST (rv.value AS INT) = r.bp_id AND
rv.type = 'BOX'
GO
但是当我想执行它时总是出现这个错误:
Incorrect syntax near 'REPLACE'.
我不明白为什么 SQL 服务器中也存在 REPLACE 语句。它似乎也无法识别 CAST 命令。我正在使用 Microsoft SQL Server Management Studio 17
SQL 服务器不支持 CREATE OR REPLACE VIEW
.
相反,第一次创建视图。然后简单地使用ALTER VIEW
。那是最简单的方法。您也可以删除视图并重新创建它。
在 SQL Server 2016 SP1 及更高版本(包括 Azure SQL 数据库)中,使用 CREATE OR ALTER VIEW
实现等效功能。在较早的 SQL 服务器版本中,必须先删除视图,然后再删除 CREATE VIEW
和 GRANT
权限。
我已经通过 liquibase 将 oracle 数据库迁移到 Microsoft SQL 服务器,但仍然有一些 SQL 语句不起作用。这个在 oracle 中看起来像这样:
CREATE OR REPLACE VIEW "BP_RESULTS_VIEW" (
BP_ID,
RES_NAME,
RES_LONG_NAME,
MEDIAN,
LOW_HINGE,
HIGH_HINGE,
H_SPREAD,
INNER_FENCE_LOW,
INNER_FENCE_HIGH,
OUTER_FENCE_LOW,
OUTER_FENCE_HIGH,
LOW_NOTCH,
HIGH_NOTCH,
LOW_ADJACENT_VALUE,
HIGH_ADJACENT_VALUE)
AS
SELECT
r.BP_ID,
rv.RES_NAME,
rv.RES_LONG_NAME,
r.MEDIAN,
r.LOW_HINGE,
r.HIGH_HINGE,
r.H_SPREAD,
r.INNER_FENCE_LOW,
r.INNER_FENCE_HIGH,
r.OUTER_FENCE_LOW,
r.OUTER_FENCE_HIGH,
r.LOW_NOTCH,
r.HIGH_NOTCH,
r.LOW_ADJACENT_VALUE,
r.HIGH_ADJACENT_VALUE
FROM
bp_results r,
results_view_display rv
WHERE
CAST (rv.value AS INT) = r.bp_id AND
rv.type = 'BOX';
将其迁移到 Microsoft SQL 服务器后,它看起来像这样:
CREATE OR REPLACE FORCE VIEW BP_RESULTS_VIEW (BP_ID, RES_NAME, RES_LONG_NAME, MEDIAN,
LOW_HINGE, HIGH_HINGE, H_SPREAD, INNER_FENCE_LOW, INNER_FENCE_HIGH,
OUTER_FENCE_LOW, OUTER_FENCE_HIGH, LOW_NOTCH, HIGH_NOTCH,
LOW_ADJACENT_VALUE, HIGH_ADJACENT_VALUE) AS SELECT
r.BP_ID,
rv.RES_NAME,
rv.RES_LONG_NAME,
r.MEDIAN,
r.LOW_HINGE,
r.HIGH_HINGE,
r.H_SPREAD,
r.INNER_FENCE_LOW,
r.INNER_FENCE_HIGH,
r.OUTER_FENCE_LOW,
r.OUTER_FENCE_HIGH,
r.LOW_NOTCH,
r.HIGH_NOTCH,
r.LOW_ADJACENT_VALUE,
r.HIGH_ADJACENT_VALUE
FROM
bp_results r,
results_view_display rv
WHERE
CAST (rv.value AS INT) = r.bp_id AND
rv.type = 'BOX'
GO
但是当我想执行它时总是出现这个错误:
Incorrect syntax near 'REPLACE'.
我不明白为什么 SQL 服务器中也存在 REPLACE 语句。它似乎也无法识别 CAST 命令。我正在使用 Microsoft SQL Server Management Studio 17
SQL 服务器不支持 CREATE OR REPLACE VIEW
.
相反,第一次创建视图。然后简单地使用ALTER VIEW
。那是最简单的方法。您也可以删除视图并重新创建它。
在 SQL Server 2016 SP1 及更高版本(包括 Azure SQL 数据库)中,使用 CREATE OR ALTER VIEW
实现等效功能。在较早的 SQL 服务器版本中,必须先删除视图,然后再删除 CREATE VIEW
和 GRANT
权限。