Sql server WHERE子句中的SQL占位符
我搜索了SO和谷歌,但无法理解这些解释,也无法判断它们是否相关 这是本报告的WHERE条款: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)
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,而是用户在运行报告之前输入的值。是的,因此您需要了解如何从您使用的任何报告工具设置这些值。我把它们作为占位符放在那里,向您展示如何使用变量。如果你不知道如何设置变量值,那么这是一个完全不同的线程问题。哦,好的,谢谢你帮助我开始。我将创建一个新问题。