Liquibase:如何删除一个函数(如果存在)

时间:2018-07-23 13:16:32

标签: sql-server liquibase

如果数据库中存在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语法,效果很好。

有什么主意吗?

2 个答案:

答案 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>