这是存储过程
$this->context->smarty->assign( 'varName', 'varValue' );
子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
你有什么好主意吗?
答案 0 :(得分:1)
只有一个子查询,因此返回多个项目。
你可以通过获得第一项来轻松解决这个问题:
SET @ItemType = (SELECT TOP 1 ItemType ...
但是,您应该考虑为什么子查询返回多个项目,并返回正确的项目。
答案 1 :(得分:0)
您可以尝试这种方式 -
ALTER PROCEDURE [dbo].[spGetMarkdownPlan]
@MarkdownPlanDate VARCHAR(10),
@Memo VARCHAR(100)
AS
SET NOCOUNT ON;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
--DECLARE @ItemType VARCHAR(4)
IF OBJECT_ID('tempdb..#ItemType') IS NOT NULL
DROP TABLE #ItemType
CREATE TABLE #ItemType (ItemType VARCHAR(4));
INSERT INTO #ItemType
SELECT ItemType FROM tblMarkDownPlan
WHERE MarkdownPlanDate >= CONVERT(SMALLDATETIME, @MarkdownPlanDate)
AND MarkdownPlanDate < CONVERT(SMALLDATETIME, @MarkdownPlanDate) + 1
AND Memo = @Memo;
BEGIN
--IF @ItemType = '0010' -- itemcode
IF EXISTS (SELECT 1 FROM #ItemType WHERE ItemType = '0010') -- itemcode
BEGIN
SELECT mdp.Itemcode,
SectionCode,
ColorID ='',
SizeDCode ='',
CurrentPrice,
MarkDownPrice
FROM tblMarkDownPlan mdp LEFT OUTER JOIN tblMarkDownPlanSection mdps ON (mdp.MarkdownPlanDate = mdps.MarkdownPlanDate AND mdp.Itemcode = mdps.Itemcode AND mdp.Memo = mdps.Memo)
WHERE mdp.MarkdownPlanDate >= CONVERT(SMALLDATETIME, @MarkdownPlanDate)
AND mdp.MarkdownPlanDate < CONVERT(SMALLDATETIME, @MarkdownPlanDate) + 1
AND mdp.Memo = @Memo
AND mdp.ItemType = '0010'
END
ELSE
SELECT mdp.Itemcode,
SectionCode,
ColorID ,
SizeDCode ,
CurrentPrice,
MarkDownPrice
FROM tblMarkDownPlan mdp LEFT OUTER JOIN tblMarkDownPlanSectionSKU mdpsku ON (mdp.MarkdownPlanDate = mdpsku.MarkdownPlanDate AND mdp.Itemcode = mdpsku.Itemcode AND mdp.Memo = mdpsku.Memo)
WHERE mdp.MarkdownPlanDate >= CONVERT(SMALLDATETIME, @MarkdownPlanDate)
AND mdp.MarkdownPlanDate < CONVERT(SMALLDATETIME, @MarkdownPlanDate) + 1
AND mdp.Memo = @Memo
AND mdp.ItemType != '0010'
IF OBJECT_ID('tempdb..#ItemType') IS NOT NULL
DROP TABLE #ItemType
END