如果在存储过程中

时间:2015-12-28 01:48:33

标签: sql stored-procedures

我正在处理存储过程,我遇到了一个问题,即使是在研究中我也无法解决...

我想让我的用户在某些记录上填写姓名(NOM)的可能性,但他们不会被迫。如果他们不这样做,我想填写如果我自己约会,这是我的麻烦...

CREATE PROCEDURE [dbo].[G_INSERT](
    @NOM Text = null
) AS
BEGIN 
    IF (@NOM IS NULL OR @NOM = '')
    BEGIN
        SET @NOM = 'Evaluation du' + CONVERT(text, GETDATE(), 100)
    END

    INSERT INTO toto(
        NOM)
    VALUES (
        @NOM
    )
END

这是我当前的程序,但它不起作用... Visual studio不报告任何错误,但当我点击"更新"时,更新失败:(

它可能是"如果开始...结束",因为当我删除它时,它工作正常。

感谢您的帮助!

编辑:

数据类型text和varchar在等于运算符中不兼容。 在第27行("如果"行,NOM是数据库中的varchar(300))

3 个答案:

答案 0 :(得分:2)

TEXT是一种过时的数据类型,您不应再使用它(请参阅here)。

您可以将存储过程编写为:

CREATE PROCEDURE [dbo].[G_INSERT] (
    @NOM VARCHAR(255) = null
) AS
BEGIN 
    IF (@NOM IS NULL OR @NOM = '')
    BEGIN
        SET @NOM = 'Evaluation du' + CONVERT(text, GETDATE(), 100)
    END

    INSERT INTO toto(NOM)
        SELECT (CASE WHEN @NOM IS NULL OR @NOM = ''
                     THEN 'Evaluation du ' + CONVERT(VARCHAR(255), GETDATE(), 100)
                     ELSE @NOM
                END);
END;

您可以简化逻辑并删除IF

答案 1 :(得分:1)

好的,根据程序,我发现@NOM是文本。简单的错误。

答案 2 :(得分:0)

您可以使用以下语法:

CREATE PROCEDURE [dbo].[G_INSERT] (
    @NOM VARCHAR(255) = null
) AS
BEGIN 

    INSERT INTO toto(NOM)
        SELECT iif( @NOM IS NULL OR @NOM = '','Evaluation du ' + CONVERT(VARCHAR(255), GETDATE(), 100),@NOM);
END;