大家来帮一下吧!晕死了!

JadyWang 2003-10-19 09:56:23
declare @LastRecord int

/*
declare @TableName varchar(20)
declare @IndexCol char(10)
declare @CurrentPage int
declare @PageCount int
set @TableName='QQ_Person_Online'
set @IndexCol='IndexCol'
set @CurrentPage=1
set @PageCount=2
exec('set @LastRecord=(select top 100 '+@IndexCol+' from '+@TableName+' where '+@IndexCol+'='+@CurrentPage+'*'+@PageCount+' order by '+@IndexCol+')')
*/

/*
set @LastRecord=(select top 100 IndexCol from QQ_Person_Online where IndexCol=1*2 order by IndexCol)
*/
select @LastRecord
问题如下:
若执行第一部分注释中的句子,则报错:”服务器: 消息 137,级别 15,状态 1,行 1
必须声明变量 '@LastRecord'。

(所影响的行数为 1 行)

若执行第二部分注释中的句子则正确,百思不得解?!





...全文
42 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
JadyWang 2003-10-19
  • 打赏
  • 举报
回复
是吗?哦,我是看book online 上说的
newdongkui 2003-10-19
  • 打赏
  • 举报
回复
没有啊,好用这呢。
JadyWang 2003-10-19
  • 打赏
  • 举报
回复
回”老乌鸦“:
好象在sql-2000中sp_sqlexec被弃用了
JadyWang 2003-10-19
  • 打赏
  • 举报
回复
回“平平淡淡”:
(1)看似不对,但我的IndexCol是identity的,select top 100 IndexCol from QQ_Person_Online where IndexCol=1*2 order by IndexCol的返回值其实是唯一的!而top 100
只是为了后面的order by IndexCol(好像是sql的规定,否则报错)
(2)declare @IndexCol char(10)只是作为参数给出列名,而IndexCol列的数据为int identity(1,1)
JadyWang 2003-10-19
  • 打赏
  • 举报
回复
哦!呵呵。
我原意是将set @LastRecord=(select top 100 IndexCol from QQ_Person_Online where IndexCol=1*2 order by IndexCol)
写成:
exec('set '+@LastRecord+'=(select top 100 '+@IndexCol+'from '+@TableName+'where '+@IndexCol+'='+@CurrentPage+'*'+@PageCount+'order by '+@IndexCol+')')
因为在存储过程里面上一句不能执行。可是报错:
服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: '=' 附近有语法错误。


welyngj 2003-10-19
  • 打赏
  • 举报
回复
老兄啊,先不说你的问题,我发现你的脚本错误之处:
@LastRecord变量,存储单个值
而select top 100 IndexCol from QQ_Person_Online where IndexCol=1*2 order by IndexCol的结果是个集合。
把集合赋给一个单个值,行吗?
declare @LastRecord int
declare @IndexCol char(10)
数值类型又不相同。
newdongkui 2003-10-19
  • 打赏
  • 举报
回复
看看 sp_sqlexec 这个,别用exec
Ouyangyifeiczy 2003-10-19
  • 打赏
  • 举报
回复
@LastRecord 变量需在EXEC('declare @LastRecord ....')中声明。
想必很多人都拥有多台电脑,譬如台式机+笔记本,很多时候我们都会同时打开它们工作。可是你有没发现,如果桌子上摆放着多台电脑多套键盘鼠标,不停来回切换使用是否很累呢?如果说现在可以只用一套键鼠,就能同时控制你全部的电脑,你会否兴奋? Synergy 正是为此而生的好工具!它可以让你的多台电脑共享一套键鼠,甚至还可以共享剪贴板,而你只需动动鼠标,指针就可以轻松地在各台电脑屏幕之间来回穿梭,就像一台电脑使用多个显示器一样。而且 Synergy 完全免费开源,并跨平台支持 Win/Mac/Linux,相当给力! 使用之后,工作效率提高,腿不酸腰不疼,桌面也干净了,绝对是绝世神器啊! Synergy 的使用方法: 我的桌子上有1个台式机 (Windows7) 和1个 MacBook Pro 笔记本 (Mac OSX),偶尔还会用到另外一台笔记本 (Linux/Win双系统) 同时协同工作,这时候桌子上的键鼠们开始打架了,3个鼠标+2个键盘,还要不断移动身体去迁就电脑的位置。这时候就可以,或者说是非常需要 Synergy 来解放这种痛苦了!OK,开始吧…… Synergy 有一个使用前提,就是你的应用环境中的多台电脑需要在同一局域网内。譬如说,家里使用一个路由器共享上网的,其下的全部电脑一般就是在同一局域网内。关于局域网的知识就不再在此阐述了,估计大家都知道怎么组网吧。 虽然 Synergy 的配置和使用其实并不难,但目前它只有英文界面,而且界面我个人感觉做得不是很易用,可能新手咋看上去有点晕,我大概说说它是怎么个运作的吧。当然,这事也不能说得太细,不然大家就没得折腾了,这一没折腾,很多人就没人生乐趣了,到时候黑着脸来找我就不好。 设置服务器端: 为了简单起见,我现在只选用已经在同一局域网下的 Macbook Pro 和 PC 两台电脑,而且为了教程更通用,我把MBP也切换到Win7系统 (就是现在两台电脑都是Win7了),在它们中都安装好 Synergy 之后,那么我们先要挑一台使用键鼠的机器设置为服务器端,这里是我的台式机。如图: 按 Configure Server 进入设置界面: 从右上角拖动一台电脑放到方框中 (删除的话是把电脑图标拖放到左上角的垃圾桶),模拟现实的位置摆放好。例如我的台式机PC是服务器端,MacBook 是在台式机的左边,按图中那样设置,然后把名字改成客户端电脑的计算机名(Win用户可以在“我的电脑”右键属性中看到)。如果多台电脑也是这样依次添加,确定后返回之前的界面,按Start启动服务。 设置客户端: 客户端的设置比服务器端要简单得多。我们来到 Macbook上,启动 Synergy 后,只要选择成客户端模式,并填上服务器的计算机名或者IP地址即可。如下图,设置好后,同样按 Start 即可让其连接服务器。 一般来说,如果连接成功的话,你的鼠标已经可以游走在两台电脑之间了。当然,当的鼠标从PC移动到Macbook之后,我们的键盘也会对Macbook生效,而对PC无效了。我可以在 MacBook 上CTRL+C拷贝一些文字,然后再移动回PC上按键盘CTRL+V粘贴,一切都是那么顺畅自然!非常有意思! 写在后面: Synergy 真的是一款相当相当赞的软件!它能大大提高多电脑用户的工作效率,特别是频繁要在不同平台下工作的朋友。更难能可贵的是,这么优秀的一款软件竟然还是免费开源的~不得不对作者肃然起敬啊。其实对于这种软件,即使是要付款的,我也觉得很值得,因为它能真真切切地方便自己。目前唯一美中不足的是,它只能跨机共享剪贴板中的文本信息,不能跨电脑拷贝文件,也不能方便地在两台电脑之间随意拖动来传输文件,不然就真是碉堡了。至于在Mac和Linux下的操作、快捷键的设置等更多高级的玩法就等你自己去折腾吧。 另外,我发现这货还能用来捉弄人,让女友/男友给送个小鼠标,然后偷偷ta装上 Synergy 之后连接好,在Ta正沉迷着玩某东西的时候,一鼠标飞过去,咩咔咔,咱家的小鼠标还有魔法效果呢!这种吓死爹的效果真不错的。废话我说完了,撤……

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧