为什么报错---------遍历一个表里的数据然后循环赋值

雄牛 2017-03-14 11:19:29


是这样,我想取得一个表里的所有记录,然后取出每一条记录里的值,用来去执行一个存储过程,但为什么会报错呢



declare @SiteIP varchar(50)
declare @SitePort varchar(50)
declare @LoginName varchar(50)
declare @loginPwd varchar(50)
declare @n int,@rows int
select @rows =(select COUNT(id) from dbo.site )--查出所客户机模式的IP
set @n=1
while @n<=@rows
begin
set @SiteIP=(select SiteIP from dbo.site )
set @SitePort=(select SitePort from dbo.site )
set @LoginName=(select LoginName from dbo.site )
set @loginPwd=(select loginPwd from dbo.site)

--执行存储过程
select @sql='exec SP_UpDataToServ '+@SiteIP+','+@LoginName+','+@loginPwd+'' --执行存储过
print (@SiteIP)
select @n=@n+1
end
...全文
249 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2017-03-15
  • 打赏
  • 举报
回复
这一段改改,字符串引号要输入两次
select @sql='exec SP_UpDataToServ '''+@SiteIP+''','''+@LoginName+''','''+@loginPwd+''';' --执行存储过
卖水果的net 2017-03-15
  • 打赏
  • 举报
回复
print (@SiteIP) 结果是什么? 应该不是你想要的结果;
道素 2017-03-15
  • 打赏
  • 举报
回复
select SiteIP from dbo.site 返回的可能是多行,你不能赋值给一个值变量 如果你想这么写,你的site表要有个序号,然后用

set @SiteIP=(select SiteIP from dbo.site  where ID=@i)
否则用CURSOR操作

            DECLARE @SiteIP varchar(50)
            declare @SitePort varchar(50)
            declare @LoginName varchar(50)
            declare @loginPwd varchar(50)
            declare @n int,@rows int

            DECLARE cur CURSOR FOR 
            SELECT SiteIP,SitePort,LoginName,loginPwd from dbo.site
            OPEN cur 
            FETCH NEXT FROM cur INTO @SiteIP,@SitePort,@LoginName,@loginPwd
            WHILE(@@FETCH_STATUS=0)
            BEGIN
                --执行存储过程
                 SELECT @sql='exec SP_UpDataToServ '+@SiteIP+','+@LoginName+','+@loginPwd+'' --执行存储过
                 print (@SiteIP)
                 FETCH NEXT FROM cur INTO @SiteIP,@SitePort,@LoginName,@loginPwd
            END 
            CLOSE cur 
            DEALLOCATE cur 

22,210

社区成员

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

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