2017-06-07 4 views
0

関数が存在しない場合は作成し、存在する場合は更新したいと考えています。conditonsで関数を作成する

しかし、mssqlでは、関数の近くで構文が間違っていると言われています。私は更新が/条件で関数を作成することができますどのように

IF NOT EXISTS(SELECT 1 FROM sys.objects where name='CreateJson' AND type='U') 
Begin 
Create function [dbo].CreateJson 
(
    @String nvarchar(4000), 
    @Param0 SQL_VARIANT = NULL 
) 
returns nvarchar(4000) 
as 
begin 
    declare @Null nvarchar(4) = N'NULL'; 
    return replace(@String, N'{0}', cast(isnull(@Param0, @Null) as nvarchar(4000))); 
end 

end 
IF EXISTS(SELECT 1 FROM sys.objects where name='CreateJson' AND type='U') 
Begin 

Alter function [dbo].CreateJson 
(
    @String nvarchar(4000), 
    @Param0 SQL_VARIANT = NULL 

) 
returns nvarchar(4000) 
as 
begin 
    declare @Null nvarchar(4) = N'NULL'; 
    return replace(@String, N'{0}', cast(isnull(@Param0, @Null) as nvarchar(4000))); 
     end 
End 
Go 

+0

、それが存在して、常にそれを再作成する場合、関数をドロップします。 –

+0

これは最終的に2016年に利用可能です!!! –

答えて

1

条件付きでそれをドロップする方が簡単かもしれません: (のようなSql Server equivalent to Oracle's CREATE OR REPLACE VIEW)の代わりに

IF OBJECT_ID('[dbo].[CreateJson]') IS NOT NULL 
DROP FUNCTION [dbo].[CreateJson] 
GO 
CREATE FUNCTION [dbo].[CreateJson] 
AS 
-- 
+0

の作成または変更手順については、同じ動作を使用する必要がありますか? – John

+0

あなたはそれを行うことができます。私は通常やります。あなたはテーブル以外のすべてに対してこのアプローチを使うことができます(データを保持したくない場合) – realbart

+0

タイプのために私がそれを行う方法を知っていますか? – John

関連する問題