作者michaeljok (michaeljoking)
看板Database
标题[SQL ]MS SQL 预存程序参数问题
时间Mon May 19 17:23:35 2014
(针对
SQL 语言的问题,用这个标题。请用 Ctrl+Y 砍掉这行)
资料库名称:MS SQL Server
资料库版本:2008
内容/问题描述:MS SQL 预存程序参数问题
练习书上的范例发现在MS SQL 2008预存程序有问题
1、程序需要输入3个参数:PaperID 数字、Type 文字(单选题、复选题、是非题、填充题
、问答题)、UserID
2、UserID 试过 12345(数字-->转换成资料类型 int 时转换失败) 和 test(文字-->无效
的资料行名称 test)都出现错误,可是UserID有可能是这2种型态
3、单独下SQL又可以正确执行
select * from UserAnswermr,SingleProblemmr where [Type]='单选题' and
UserAnswermr.TitleID=SingleProblemmr.ID and [PaperID]='116' and [UserID]=
'test'
请问先进,以下这个预存程序错在哪里?该如何修正?谢谢。
CREATE PROCEDURE [dbo].[Proc_UserAnswermr]
(@PaperIDint,
@Typevarchar(10),
@UserID varchar(50))
AS
begin
declare @sql nvarchar(1000)
if @Type='单选题'
begin
set @sql='select * from UserAnswermr,SingleProblemmr
where [Type]=''单选题'' and
UserAnswermr.TitleID=SingleProblemmr.ID and [PaperID]= ' +Cast(@PaperID AS
varchar(10)) + ' and
[UserID]= ' + @UserID
exec sp_executesql @sql
end
else if @Type='复选题'
begin
set @sql='select * from UserAnswermr,MultiProblemmr
where [Type]=''复选题'' and
UserAnswermr.TitleID=MultiProblemmr.ID and [PaperID]= ' +Cast(@PaperID AS
varchar(10)) + ' and
[UserID]= ' + @UserID
exec sp_executesql @sql
end
else if @Type='是非题'
begin
set @sql='select * from UserAnswermr,JudgeProblemmr
where [Type]=''是非题'' and
UserAnswermr.TitleID=JudgeProblemmr.ID and [PaperID]= ' +Cast(@PaperID AS
varchar(10)) + ' and
[UserID]= ' + @UserID
exec sp_executesql @sql
end
end(因为字数限制截短了)
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 192.192.47.247
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Database/M.1400491417.A.BE2.html
1F:推 twoseven:[UserID]= ''' + @UserID + '''' 05/24 08:57