首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于参数化查询,哪个地方疏失了

2012-11-10 
关于参数化查询,哪个地方出错了sql server 2008 存储过程,作用是接受 年级和科目 两个变量,输出该年级该科

关于参数化查询,哪个地方出错了
sql server 2008 存储过程,作用是接受 年级和科目 两个变量,输出该年级该科目的标准分。

SQL code
USE [1112b]GO/****** Object:  StoredProcedure [dbo].[xiaoxuebiaozhunfen]    Script Date: 07/25/2012 15:16:47 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER procedure [dbo].[xiaoxuebiaozhunfen](@in_nianji nvarchar(10),@in_kemu nvarchar(10))asIF object_id('[tempdb].[dbo].#biaozhunfen') IS NOT NULL --判断临时表#biaozhunfen是否存在,存在则删除begindrop table #biaozhunfenend--这个大段是生成临时表declare @QueryString nvarchar(500)declare @paramstring nvarchar(500)declare @input_kemu nvarchar(10)declare @input_nianji nvarchar(10)set @paramstring='@kemu nvarchar(10),@nianji nvarchar(10)' --设置动态语句中参数的定义的字符串,多个参数用","隔开set @input_kemu =@in_kemu  --设置需传入动态语句的参数的值为@kemuset @input_nianji=@in_nianji   --设置需传入动态语句的参数的值为@nianjiset @QueryString ='SELECT @kemu as 科目,     [ROW_NUMBER] = ROW_NUMBER() OVER(ORDER BY @kemu DESC),    [DENSE_RANK] = DENSE_RANK() OVER(ORDER BY @kemu DESC),     [PERCENT] = (ROW_NUMBER() OVER(ORDER BY @kemu DESC))*1./(SELECT COUNT(1) FROM scores_xx where 年级 = @nianji)  into #biaozhunfen  FROM scores_xx  where 年级 = @nianji'exec sp_executesql @QueryString,@paramstring,@kemu=@input_kemu,@nianji=@input_nianji --请注意参数的顺序--生成临时表结束--在临时表中执行查询declare @QueryString2 nvarchar(500)declare @paramstring2 nvarchar(500)declare @input_kemu2 nvarchar(10)set @QueryString2 = 'SELECT TOP 1 @kemu FROM (  SELECT * FROM #biaozhunfen T1  WHERE NOT EXISTS  (SELECT 1 FROM #biaozhunfen WHERE [DENSE_RANK] = T1.[DENSE_RANK] AND [ROW_NUMBER] > T1.[ROW_NUMBER])) AS A ORDER BY ABS([PERCENT]-0.8);'set @input_kemu2 =@in_kemu  --设置需传入动态语句的参数的值为@kemuexec sp_executesql @QueryString,@paramstring,@kemu=@input_kemu2 --请注意参数的顺序

报错如下:
SQL code
(1505 行受影响)消息 8178,级别 16,状态 1,第 0 行参数化查询 '(@kemu nvarchar(10),@nianji nvarchar(10))SELECT @kemu as 科目,  ' 需要参数 '@nianji',但未提供该参数。(1 行受影响)


[解决办法]
1、(@in_nianji nvarchar(10),@in_kemu nvarchar(10))这里不用括号,以下就可以了
@in_nianji nvarchar(10),
@in_kemu nvarchar(10)
2、as后面的
begin
end
怎么没有

热点排行