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在没有找到时创建一条新记录的主要内容,如果未能解决你的问题,请参考以下文章