- 爱易网页
 
                        - 
                            MSSQL教程
 
                        - 【100分】存储过程where 字句参数有关问题 ! 
 
                         
                    
                    
                    日期:2014-05-18  浏览次数:20535 次 
                    
                        
                         【100分】存储过程where 字句参数问题 在线等!!!!!!
下面是存储过程源码,在存储过程中进行了分页,因为要实现不同条件的查询,所以将查询条件放到了参数中,但将参数设置值后执行存储过程会出现以下错误:
(所影响的行数为 8 行)
服务器: 消息 1038,级别 15,状态 3,行 20
不能使用空白的对象或列名。如果必要,请使用一个空格。
服务器: 消息 1038,级别 15,状态 1,行 25
不能使用空白的对象或列名。如果必要,请使用一个空格。
服务器: 消息 137,级别 15,状态 1,行 29
必须声明变量 '@TmpTable'。
(所影响的行数为 1 行)
还请高手帮忙,谢谢 级别太低最多只能给100分,问题解决在加分
[code=SQL][/code]
ALTER           PROC dbo.NGems_QueryOrderListByCTID1
@MemberID uniqueidentifier,
@Page INT,
@PageCount INT,
@CTID UNIQUEIDENTIFIER,
@Condition NVARCHAR(200)
AS
-- declare @MemberID uniqueidentifier,@Page int,@PageCount int, @CTID uniqueidentifier,@Condition NVARCHAR
-- set @MemberID='E97A7B44-47DF-4D4A-9595-B9BF157ADBA5'
-- set @Page=1
-- set @PageCount=10
-- set @CTID='7A761EEB-2E25-4CC8-9F08-2BF46DE292E0'
-- set @Condition='1=1'
DECLARE @TmpTable TABLE  -- 建立暫存Table
	(
	IndexID INT IDENTITY(1,1) NOT NULL,
	OrderNo CHAR(14),
	OrderTime VARCHAR(10),
	OName NVARCHAR(20),
	MktName NVARCHAR(100),
	Amount DECIMAL,
	PayTypeText NVARCHAR(20),
	OrderStatus NVARCHAR(50),
	SendDate VARCHAR(10),
	CTID uniqueidentifier,
	StatusNo INT,
	PayType INT,
	SurePayDate DATETIME,
	OrderTime1 DATETIME,
	OrderChk VARCHAR(5)
	)
--向虚表插入资料
	INSERT INTO @TmpTable
	SELECT          
		OM.OrderNo,
		CONVERT(VARCHAR(10),OM.OrderTime,111) OrderTime,
		OName,
		(
		SELECT TOP 1
			Mkt.MktName
		FROM
			GemOrder.dbo.OrderMkt OMkt
		JOIN
			GemProduct.dbo.Market Mkt ON OMkt.MktID = Mkt.MktID
		WHERE
			OMkt.OrderNo = OM.OrderNo
		) +
		CASE WHEN((SELECT COUNT(*) FROM GemOrder.dbo.OrderMkt WHERE OrderNo = OM.OrderNo) > 1)
		THEN
			'...'
		ELSE
			''
		END AS MktName,
		PayAmount Amount,
		
		
		 CASE WHEN((SELECT  
  				COUNT(*)  
  			  FROM
  				GemProduct.dbo.Market m
  			  WHERE
  				Archive=3 AND
  				datediff(d,m.SFEdate,getdate())<5 AND
  				datediff(d,m.SFEdate,getdate())>0)>0)
  		THEN
  			'<input id="btnBuy" type="button" value="立即買" />'
  		ELSE
				
			CASE WHEN(PayType = 0)
			THEN
				CASE WHEN(PeriodNumber IS NOT NULL AND PeriodNumber>0)
				THEN
					'信用卡'
				WHEN(PeriodNumber=3)
				THEN
					'信用卡3期'
				WHEN(PeriodNumber=6)
				THEN
					'信用卡6期'
				WHEN(PeriodNumber=6)
				THEN
					'信用卡9期'
				WHEN(PeriodNumber=12)
				THEN
					'信用卡12期'
				WHEN(PeriodNumber=24)
				THEN
					'信用卡24期'
				END
				
			WHEN(PayType = 1)
			THEN
				'網路ATM'
			WHEN(PayType = 3)
			THEN
				'ATM'
			END  
		END AS PayTypeText,	--付款方式
		CASE WHEN StatusNo = 100 THEN
			CASE WHEN PreDate IS NULL THEN
				(SELECT mi.Name FROM OrderStatusDef mi WHERE mi.StatusNo = OM.StatusNo)  
			ELSE
				(SELECT mi.Name FROM OrderStatusDef mi WHERE mi.StatusNo = OM.StatusNo) + '<br>(' + CONVERT(CHAR(10),PreDate,111) + ')'
			END
		ELSE
			(SELECT mi.Name FROM OrderStatusDef mi WHERE mi.StatusNo = OM.StatusNo)  
		END AS OrderStatus,
		Convert(VARCHAR(10),SendDate,111) SendDate,
		OM.CTID,
		StatusNo,
		PayType,
		SurePayDate,
		OrderTime AS OrderTime1,
		'' AS OrderChk
	FROM              
		OrderM OM
	WHERE
		OM.StatusNo != 0
	AND
		OM.MemberID = @MemberID
	AND
		OM.CTID = @CTID
	ORDER BY
		OrderTime DESC
--查询虚表资料
DECLARE @sql NVARCHAR(4000)
SET @sql='
SELECT