[SQL ]MS SQL 預存程序參數問題
(針對 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://www.ptt.cc/bbs/Database/M.1400491417.A.BE2.html
推
05/24 08:57, , 1F
05/24 08:57, 1F
Database 近期熱門文章
PTT數位生活區 即時熱門文章