带有变量“Where”的 SQL 查询

Posted

技术标签:

【中文标题】带有变量“Where”的 SQL 查询【英文标题】:SQL query with variable "Where" 【发布时间】: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,应该通过表单给出值。 【参考方案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
...

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

【讨论】:

以上是关于带有变量“Where”的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

带有 VB.net 变量字符串条件的动态 SQL 查询

如何将带有内连接语句的 Sql 查询转换为带有 Where 语句的 sql 查询(语句中没有内连接)

一个带有两个where子句的查询中的两个sql总和[重复]

带有 INNER JOIN 和 WHERE 的 SQL 查询

带有两个日期列的 sql 查询“where 子句”

C# 使用带有 where 子句的 Linq 查询作为 dataTable 上的变量