带有变量的SQL查询"其中"

时间:2014-08-15 17:59:52

标签: sql

我是SQL新手。

如何编写查询,其中Where条件依赖于将从用户提供的语句?

我有这个:

SELECT TablePersdaten.Vorname, TablePersdaten.Nachname, TableBezahlung.Datum, TableBezahlung.BelegNr, TableBezahlung.Betrag, Sum(TableBezahlung.Betrag) AS SummevonBetrag
FROM ((TableTeilnehmer INNER JOIN TablePersdaten ON TableTeilnehmer.IDPersdaten = TablePersdaten.IDPersdaten) INNER JOIN TableKurse ON TableTeilnehmer.IDKurs = TableKurse.IDKurs) INNER JOIN TableBezahlung ON TableTeilnehmer.IDTeilnehmer = TableBezahlung.IDStudent
WHERE TableBezahlung.Datum = "VALUE GIVEN FROM USER"
GROUP BY TablePersdaten.Vorname, TablePersdaten.Nachname, TableBezahlung.Datum, TableBezahlung.BelegNr, TableBezahlung.Betrag
ORDER BY TableBezahlung.Datum;
编辑:我使用的是Access 2013,但我自己用SQL-Code编写了所有代码。值应通过表格给出。

2 个答案:

答案 0 :(得分:1)

研究存储过程。您可以将用户输入作为参数包含在内,然后通过声明的参数将其传递给WHERE子句。

理想情况下它会像(INT部分可能必须具有与table.datum对应的不同值:

CREATE PROCEDURE dbo.Proc1
  @parameter1 INT

AS
BEGIN
SELECT TablePersdaten.Vorname, TablePersdaten.Nachname, TableBezahlung.Datum, TableBezahlung.BelegNr, TableBezahlung.Betrag, Sum(TableBezahlung.Betrag) AS SummevonBetrag
FROM ((TableTeilnehmer INNER JOIN TablePersdaten ON TableTeilnehmer.IDPersdaten = TablePersdaten.IDPersdaten) INNER JOIN TableKurse ON TableTeilnehmer.IDKurs = TableKurse.IDKurs) INNER JOIN TableBezahlung ON TableTeilnehmer.IDTeilnehmer = TableBezahlung.IDStudent
WHERE TableBezahlung.Datum = @parameter1
GROUP BY TablePersdaten.Vorname, TablePersdaten.Nachname, TableBezahlung.Datum, TableBezahlung.BelegNr, TableBezahlung.Betrag
ORDER BY TableBezahlung.Datum;
END

当然,在创建后执行程序:

EXEC dbo.Proc1 '@parameter1value'

答案 1 :(得分:0)

如果您参数化输入" VALUE GIVEN FROM USER"这可能就是你追求的目标。

...
WHERE TableBezahlung.Datum = &UserValue
...

单曲&'将替换该值一次。如果您使用'&&',则会在会话结束时替换该值。