数据库问题!急!如解决另加100分!!

来源:百度知道 编辑:UC知道 时间:2024/06/21 04:54:42
问题:
--声明变量
declare @i int
--给变量设置值
set @i=3
--查询表bbssection中前3个sname
exec ('select top '+@i+'sname from bbssection')

ps:上面的可以正常查出来数据,而现在我想在查的同时给另外一个变量赋值!但是总是不可以!下面要个@kk赋值
--声明变量
declare @kk varchar(45)
declare @i int
--给变量设置值
set @i=3
--查询表bbssection中前3个sname
exec ('select top '+@i+'@kk=sname from bbssection')
print @kk

ps:就是不知道=号放到哪里?请高手指点!如果可以会加分的!
'select top '+@i+' from bbssection where '@kk'=sname ' ,赋值怎么成为条件了?我试试!不行,我刚测试了!

浪漫幕末:我就是要多个赋值!我要得到的是全部赋值完后最后一个数据的值!

给你个类子吧
。。。
DECLARE @sql nvarchar(1024)
DECLARE @pa nvarchar(200)
SET @sql= N'SELECT @CaseCount = COUNT(*) FROM View_BbsData WHERE Data LIKE ''%' + @keyWord + '%'''
SET @pa = N'@CaseCount int Output'
exec sp_executesql @sql,@pa,@CaseCount=@CaseCount Output
。。。
照着这个去改你的吧,可以取得@kk的,我的例子是取的@CaseCount

'select top '+@i+'@kk=sname from bbssection' 应该改成'select top '+@i+' from bbssection where '@kk'=sname '

我来说下,你这种只能在@i的值的为1的时候才可以运行成功。当@i不为1的时候,查询结果是多条数据,你用单纯的@kk是无法保存一个集合的值的。你可以用循环来取出他们。

补充:就我的知识范围,你这样的要求是不能在一条select中完成的,需要借助游标来完成。DECLARE Employee_Cursor CURSOR FOR SELECT 。。。如果你找到了能一条select解决或者不用游标解决的办法请告诉我,谢谢。其实可以放到程序里去完成。如果是C#的话,用datareader 也是要遍历的,dataset的性能不怎么好。

这个问题原因很简单,就是top参数的问题,
top '+@i+' 需要修改成 top '(+@i+)' ,也就是需要加上括号,
还需要注数据库的版本,有的数据库不支持top里面使用参数,
应该可以解决问题,^_^