如果数据库中存在SQL标量函数,我想删除它。我们正在使用SQL Server 2014。
如果我尝试以下脚本:
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">
<changeSet context="schema" author="myself" id="1">
<comment>Drop Function MyFunction</comment>
<sql endDelimiter="\nGO">
IF EXISTS (SELECT 1 FROM sys.objects where name = N'MyFunction' AND Type = N'FN') DROP FUNCTION dbo.MyFunction
GO
</sql>
</changeSet>
</databaseChangeLog>
我收到以下消息:
运行Liquibase的意外错误:第1行第列的词法错误 105.遇到:“ \ u00a0”(160),之后:“”
我在Management Studio中检查了SQL语法,效果很好。
有什么主意吗?
答案 0 :(得分:1)
您可以尝试
IF EXISTS (SELECT 1 FROM sys.objects where name = 'MyFunction' AND Type = 'FN')
begin
DROP FUNCTION dbo.MyFunction
end
答案 1 :(得分:1)
只需从endDelimiter
中删除<sql>
:
<changeSet context="schema" author="myself" id="1">
<comment>Drop Function MyFunction</comment>
<sql>
IF EXISTS
(SELECT 1 FROM sys.objects where name = N'MyFunction' AND Type = N'FN')
DROP FUNCTION dbo.MyFunction GO
</sql>
</changeSet>