sql - SSMS 脚本选项

标签 sql sql-server ssms ssms-2016 ssms-18

使用 编写函数脚本SSMS 18.0 预览版 6 生成以下脚本。

/****** Object:  UserDefinedFunction [dbo].[sfn_Proper_Case]    Script Date: 7/13/2019 9:57:36 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sfn_Proper_Case]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
BEGIN
execute dbo.sp_executesql @statement = N'
CREATE FUNCTION [dbo].[sfn_Proper_Case]
                (
                @input    NVARCHAR(4000)
                )
RETURNS NVARCHAR(4000)
AS
    BEGIN

        SET @input = REPLACE(REPLACE(REPLACE(@input,'' '',''<>''),''><'',''''),''<>'','' '');

        DECLARE @output    NVARCHAR(512);
        DECLARE @current_position    INT = 1;

        IF DATALENGTH(@input) > 0
        BEGIN
            SET @output = '''';
        END;

        WHILE @current_position <= DATALENGTH(@input)
        BEGIN
            DECLARE @check_character     NVARCHAR(1);
            DECLARE @previous_character  NVARCHAR(1);
            DECLARE @output_character    NVARCHAR(1);

            SELECT @check_character = LOWER(SUBSTRING(@input,@current_position,1));
            SELECT @previous_character = SUBSTRING(@input,@current_position
                                                          - 1,1);

            IF @previous_character NOT LIKE ''[a-z]''
               AND @check_character LIKE ''[a-z]''
            BEGIN
                SELECT @output_character = UPPER(@check_character);
            END;
                ELSE
            BEGIN
                SELECT @output_character = @check_character;
            END;

            SET @output = @output
                          + @output_character;
            SET @current_position = @current_position
                                    + 1;
        END;

        RETURN @output;

    END;

' 
END
GO

使用 编写相同函数的脚本SSMS 2016 产生这个脚本
/****** Object:  UserDefinedFunction [dbo].[sfn_Proper_Case]    Script Date: 7/13/2019 9:55:43 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[sfn_Proper_Case]
                (
                @input    NVARCHAR(4000)
                )
RETURNS NVARCHAR(4000)
AS
    BEGIN

        SET @input = REPLACE(REPLACE(REPLACE(@input,' ','<>'),'><',''),'<>',' ');

        DECLARE @output    NVARCHAR(512);
        DECLARE @current_position    INT = 1;

        IF DATALENGTH(@input) > 0
        BEGIN
            SET @output = '';
        END;

        WHILE @current_position <= DATALENGTH(@input)
        BEGIN
            DECLARE @check_character     NVARCHAR(1);
            DECLARE @previous_character  NVARCHAR(1);
            DECLARE @output_character    NVARCHAR(1);

            SELECT @check_character = LOWER(SUBSTRING(@input,@current_position,1));
            SELECT @previous_character = SUBSTRING(@input,@current_position
                                                          - 1,1);

            IF @previous_character NOT LIKE '[a-z]'
               AND @check_character LIKE '[a-z]'
            BEGIN
                SELECT @output_character = UPPER(@check_character);
            END;
                ELSE
            BEGIN
                SELECT @output_character = @check_character;
            END;

            SET @output = @output
                          + @output_character;
            SET @current_position = @current_position
                                    + 1;
        END;

        RETURN @output;

    END;


GO

问题 - 我需要在 SSMS 18 中更改哪些脚本选项才能不添加 N'前缀和双引号 ''string literals''在使用 Right Click->Script Function as->CREATE TO 生成的输出脚本中或 Right Click->Script Function as->ALTER TO
此选项有效,但我不想删除对象 Right Click->Script Function as->DROP and CREATE TO
PS:我不记得我是否在 SSMS 2016 中的脚本选项下更改了某些内容来实现这一点,或者它是否是默认设置。谢谢!

最佳答案

您可以在以下情况下更改此行为:

SSMS->Tools->Options->SQL Server Object Explorer->Scripting->Object scripting options



对于 SSMS 16,属性 Include IF NOT EXISTS clause应设置为 False
enter image description here
图片来源:https://social.microsoft.com/Forums/getfile/14300/

对于 SSMS 18,属性 Check for object existence应设置为 False
SSMS 18

关于sql - SSMS 脚本选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57021262/

相关文章:

php - mySQL 从 PHP 表单添加到数据库时出现语法错误

c# - C# 查询三张表

sql-server - 在批处理文件中使用 SQLCMD,如何解析响应并检查错误?

Sql 函数问题 "The last statement included within a function must be a return statement"

sql-server - 如何将 SQL Server 数据库对象添加到 TFS?

sql-server - SQL Server 执行时间代表什么?

mysql - 在时间序列数据表中添加缺失的日期记录

SQL - 右连接或子查询中存在的位置/位置

sql-server - SSIS条件分割多个真实路径

sql-server-2008 - 将 .sql 脚本拖放到 SQL Management Studio 2008 中不起作用?