【问题标题】:SQL query with variable "Where"带有变量“Where”的 SQL 查询
【发布时间】:2014-08-15 17:59:51
【问题描述】:

我是 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 代码编写所有内容。值应通过表格给出。

【问题讨论】:

  • 你在使用什么 rdbms?以及使用什么工具来接收用户的输入?
  • 这个好像应该设置成存储过程,传入的值作为参数......
  • 您需要使用由用户分配值的变量。正如@Mureinik 提到的,您需要弄清楚如何获取用户输入。
  • 我使用的是 Access 2013,应该通过表单给出值。

标签: sql


【解决方案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'

【讨论】:

    【解决方案2】:

    如果您将输入“VALUE GIVEN FROM USER”参数化,这可能就是您所追求的。

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

    单个 '&' 将替换该值一次。如果您使用“&&”,它将在会话结束时替换该值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多