日期:2014-05-18  浏览次数:20362 次

【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