SQL在没有找到时创建一条新记录

Posted

技术标签:

【中文标题】SQL在没有找到时创建一条新记录【英文标题】:SQL create a new record when none was found 【发布时间】:2016-04-29 10:15:41 【问题描述】:

我正在寻找搜索特定记录的可能性。如果没有找到,则应创建并显示一个新的。

这是我目前得到的:

DECLARE @Anzahl int

Select @Anzahl = COUNT(tbl_Kommentare.FID_Typ) AS Zahl FROM tbl_Kommentare WHERE ((tbl_Kommentare.FID_Typ)=99) AND ((tbl_Kommentare.FID_Sprache)=1)

IF (@Anzahl = 0)
BEGIN
INSERT INTO tbl_Kommentare (FID_Typ, FID_Sprache) VALUES (99, 1)
END
ELSE
BEGIN
SELECT tbl_Kommentare.FID_Typ FROM tbl_Kommentare WHERE (((tbl_Kommentare.FID_Typ)=99) AND ((tbl_Kommentare.FID_Sprache)=1)))
END

我收到此通知:

无效的 sql 语句“删除”“插入”“选择”或“更新”预期

有什么问题?

【问题讨论】:

尝试删除 BEGIN, END 然后去。 如果您将这种类型的 SQL 放入 Access 中,这可能是您的问题。 Access 不会处理 SQL Server 可以处理的所有相同语句。 您是如何以及在何处执行此代码的?哪一行产生错误? @MusicLovingIndianGirl 这不起作用。 :-/ @Andre 我在一个正常的访问查询中执行这个,我试图改变我的需要。也许这就是问题所在?错误是由第一行产生的。 【参考方案1】:

你不能在 Access 中运行 T-SQL,你可以用完全不同的方式来做。

在表单中,将两个字段的DefaultValue属性分别设置为99和1。

然后,在您的表单中,使用 DCount 来查找值:

If IsNull(DLookup("FID_Typ", "tbl_Kommentare", "[FID_Typ]=99 AND [FID_Sprache]=1")) Then
    DoCmd.GoToRecord acActiveDataObject, Me.Name, acNewRec 
End If

【讨论】:

【参考方案2】:

您忘记在每条语句的末尾添加;。在select @....... ); 的末尾、INSERT INTO tbl...... ); 的末尾和SELECT tbl_kom....); 的末尾添加广告。

另外,您的最后一个 SELECT.... 语句中有一个额外的括号。改变这个:

(((tbl_Kommentare.FID_Typ)=99) AND ((tbl_Kommentare.FID_Sprache)=1)))

到这里:

(((tbl_Kommentare.FID_Typ)=99) AND ((tbl_Kommentare.FID_Sprache)=1));

如果这些更正解决了问题,请告诉我。

【讨论】:

以上是关于SQL在没有找到时创建一条新记录的主要内容,如果未能解决你的问题,请参考以下文章

如何在sql创建一条插入数据的存储过程

odoo 创建一条记录的时候自动增加一个序列号

删除的记录没有给我他们的 ID

SQL 限制平均值

将 SQL Server 中 datetime 字段的默认值添加到时间戳

如何在没有 ID 的情况下在 Prisma 中插入新记录?