我正在处理存储过程,我遇到了一个问题,即使是在研究中我也无法解决...
我想让我的用户在某些记录上填写姓名(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))
答案 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;