读书人

这个查询为何不返回结果只返回受影响

发布时间: 2012-11-05 09:35:12 作者: rapoo

这个查询为什么不返回结果,只返回受影响的行数

SQL code
USE [1112b]GOdeclare @in_kemu nvarchar(10)set @in_kemu = '语文'--这个大段是生成临时表declare @QueryString nvarchar(500)declare @kemu nvarchar(10)set @kemu =@in_kemu  --设置需传入动态语句的参数的值为@kemuset @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 年级 ='+'1'+')  into #biaozhunfen  FROM scores_xx  where 年级 = '+'1'exec (@QueryString) --请注意参数的顺序--生成临时表结束--在临时表中执行查询declare @QueryString2 nvarchar(500)declare @kemu2 nvarchar(10)set @QueryString2 = 'SELECT TOP 1 '+@kemu2+' 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 @kemu2 =@in_kemu  --设置需传入动态语句的参数的值为@kemuexec (@QueryString2) --请注意参数的顺序


[解决办法]
我试了一下下面的语句:

exec ('select * into #abc123 from sys.objects')


exec('select * from #abc123')

运行结果:

(55 行受影响)
消息 208,级别 16,状态 0,第 1 行
对象名 '#abc123' 无效。

从上面的运行结果看出,调用exec执行,所产生的临时表的有效期只是在执行期间,exec执行完成后这个临时表自动释放,就不存在了,所以就导致第二exec语句执行报错,找不到对象名。

读书人网 >SQL Server

热点推荐