Sql server WHERE子句中的SQL占位符

Sql server WHERE子句中的SQL占位符,sql-server,placeholder,Sql Server,Placeholder,我搜索了SO和谷歌,但无法理解这些解释,也无法判断它们是否相关 这是本报告的WHERE条款: WHERE (IC_ProductLots.ProductionDate >= { ts '2015-06-24 00:00:00' } AND (IC_ProductLots.ProductionDate <= { ts '2015-06-24 00:00:00' } OR IC_ProductLots.ProductionDate Is Null)) AND ((1=1)

我搜索了SO和谷歌,但无法理解这些解释,也无法判断它们是否相关

这是本报告的WHERE条款:

WHERE 
    (IC_ProductLots.ProductionDate >= { ts '2015-06-24 00:00:00' }   AND (IC_ProductLots.ProductionDate <= { ts '2015-06-24 00:00:00' } OR IC_ProductLots.ProductionDate Is Null)) 
AND ((1=1)  AND AR_Customers.CustomerKey IN (124) ) 
当用户运行报告时,WHERE子句自动填充他们为生产日期和客户密钥输入的信息

对于这个报告,我必须创建几个在set部分调用的变量。以下是一个例子:

SET @Shrink  = @InputWeight - (
 SELECT Sum([ICPL].[OriginalQuantity_Stk])
 FROM IC_Products [PC] 
 INNER JOIN DC_Transactions [DCT] 
 ON [PC].ProductKey = [DCT].ProductKey
 INNER JOIN AR_Customers 
 ON [DCT].CustomerKey = AR_Customers.CustomerKey
 INNER JOIN IC_ProductLots [ICPL] 
 ON [DCT].LotKey = [ICPL].LotKey
 LEFT OUTER JOIN IC_ProductCosts [ICP] 
 ON ICP.ProductKey=PC.ProductKey and ICP.ProductCostCode=5
 WHERE (ICPL.ProductionDate >= { ts '2015-06-24 00:00:00' } AND (ICPL.ProductionDate <= { ts '2015-06-24 00:00:00' } OR ICPL.ProductionDate Is Null)) 
AND ((1=1) AND AR_Customers.CustomerKey IN (124)) 
);
对于设置区域中的WHERE子句,我需要WHERE子句填充生产日期和用户在运行报告时输入的客户密钥。有办法做到这一点吗? 如果我需要提供更多解释,请告诉我


我只使用SQL。MicrosoftSQLServer2005

是的,您可以为要替换的特定值定义变量。假设这是您正在谈论的SQL Server,这是可行的,但是您必须知道,如果对于@key,下面的内容将不适用于逗号分隔的值,而只适用于单例值。如果需要逗号分隔的值,则可能需要动态sql。我尝试了数据类型,根据需要进行修复

declare @ts1 datetime,
    @ts2 datetime,
    @key int;

set @ts1 = '2015-06-24 00:00:00';
set @ts2 = '2015-06-24 00:00:00';
set @key = 124;

SET @Shrink  = @InputWeight - (
 SELECT Sum([ICPL].[OriginalQuantity_Stk])
 FROM IC_Products [PC] 
 INNER JOIN DC_Transactions [DCT] 
 ON [PC].ProductKey = [DCT].ProductKey
 INNER JOIN AR_Customers 
 ON [DCT].CustomerKey = AR_Customers.CustomerKey
 INNER JOIN IC_ProductLots [ICPL] 
 ON [DCT].LotKey = [ICPL].LotKey
 LEFT OUTER JOIN IC_ProductCosts [ICP] 
 ON ICP.ProductKey=PC.ProductKey and ICP.ProductCostCode=5
 WHERE (ICPL.ProductionDate >= @ts1 
    AND (ICPL.ProductionDate <= @ts2
        OR ICPL.ProductionDate Is Null)) 
AND ((1=1) AND AR_Customers.CustomerKey IN (@key)) 
);

你在用什么产品?sql server?MySQL?有前端应用程序语言吗?使用什么工具/语言创建报告?@TabAlleman我只使用SQL。Microsoft SQL Server 2005。尝试执行此操作时,在“您应该删除大于/小于号”附近出现错误[Microsoft][ODBC SQL Server驱动程序][SQL Server]语法错误。我将用您的硬编码值更新上面的示例。这是有道理的。但是,该值并不总是6/24,而是用户在运行报告之前输入的值。是的,因此您需要了解如何从您使用的任何报告工具设置这些值。我把它们作为占位符放在那里,向您展示如何使用变量。如果你不知道如何设置变量值,那么这是一个完全不同的线程问题。哦,好的,谢谢你帮助我开始。我将创建一个新问题。