急,急,急 sqlserver中能不能用if和for循环?

uutt001 2016-08-12 10:29:38
如题,sqlserver中能否用到for和if 语句,
比如;现在我通过查询得到了所有数据的总条数
for(表的总条数)
{
if(表的条件 ==某某)
{
显示出符合条件的数据
}
else if(表的条件==某某)
{
显示出符合条件的数据
}
}

能不能以这种逻辑来设计sql语句
...全文
2797 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
快溜 2016-08-12
  • 打赏
  • 举报
回复
引用 5 楼 mingqing6364 的回复:
1.SQL SERVER中首先要声明变量
DECLARE @i INT
变量名前面加一个@ 是局部变量,两个@ 是全局变量 局部变量在会话结束时失效,全局变量是系统预设好了的 详细介绍可以看http://blog.csdn.net/leamonjxl/article/details/6308959 2.SQL SERVER中不使用{},begin代替{,end代替} 3.while XXX begin end中begin前面不能有分号”;“ 4.你在if中写的 Test1.dconsigndate =='2016-06-18',更是不知道怎么修改 1)SQL中赋值和比较都是一个等号,赋值前面加SET,比较不加。 2)按我的理解Test1.dconsigndate应该是某个表的某一列,一列可能有多行数据,是一个集合的概念,怎么能和一个值比较?何况SQL从表中取数据必须使用 SELECT * FROM TABLE WHERE……这样的句式 总结一下:我的理解,SQL是一种面向数据集合的脚本语言,它能高效快速的帮助我们取得,运算,修改某一类数据;VC、VB之类的编程语言主要是处理某一个过程或对象;使用编程语言的思维方式去学习理解SQL,只会事倍功半。
Structured Query Language
LongRui888 2016-08-12
  • 打赏
  • 举报
回复
我觉得是否可以简化一下,因为sql处理数据的方式是集合,不是一条一条,所以,尽量不要一一条一条的方式来处理数据,这样会非常繁琐,且性能会比较差
造物主在胃中 2016-08-12
  • 打赏
  • 举报
回复
while可以做到for语句的实现,唯一就是,while似乎效率很低还容易出问题,所以我一般都是使用其他小技巧来实现循环 如cte递归,如select into ,insert into select ,update set from,delete from,基本都可以避免while的使用
uutt001 2016-08-12
  • 打赏
  • 举报
回复
引用 5 楼 mingqing6364 的回复:
1.SQL SERVER中首先要声明变量
DECLARE @i INT
变量名前面加一个@ 是局部变量,两个@ 是全局变量 局部变量在会话结束时失效,全局变量是系统预设好了的 详细介绍可以看http://blog.csdn.net/leamonjxl/article/details/6308959 2.SQL SERVER中不使用{},begin代替{,end代替} 3.while XXX begin end中begin前面不能有分号”;“ 4.你在if中写的 Test1.dconsigndate =='2016-06-18',更是不知道怎么修改 1)SQL中赋值和比较都是一个等号,赋值前面加SET,比较不加。 2)按我的理解Test1.dconsigndate应该是某个表的某一列,一列可能有多行数据,是一个集合的概念,怎么能和一个值比较?何况SQL从表中取数据必须使用 SELECT * FROM TABLE WHERE……这样的句式 总结一下:我的理解,SQL是一种面向数据集合的脚本语言,它能高效快速的帮助我们取得,运算,修改某一类数据;VC、VB之类的编程语言主要是处理某一个过程或对象;使用编程语言的思维方式去学习理解SQL,只会事倍功半。 [quote=引用 4 楼 uutt001 的回复:] [quote=引用 2 楼 kk185800961 的回复:] sql server 没有for循环,for 改为 while循环,内部逻辑都可用if …else 正常使用。
 set i = 1;
 while i<(select COUNT(*) from Test1);
 begin 
 set i = i+1;
 end
 if (Test1.dconsigndate =='2016-06-18')
 {
	Select * from Test1 where Test1.dconsigndate >='2016-06-18';
 }
 else if(Test1.dconsigndate =='2016-06-19')
 {
	Select * from Test1 where Test1.dconsigndate >='2016-06-19';
 }
这么写不行啊 [/quote][/quote] 其实我也不想这么写的
 declare @i int;
 set @i = 1;
 while @i <(select COUNT(*) from Test1);
 begin 
 set @i  = @i +1;
 end
 if (Test1.dconsigndate =='2016-06-18')
 {
	Select * from Test1 where Test1.dconsigndate ='2016-06-18';
 }
 else if(Test1.dconsigndate =='2016-06-19')
 {
	Select * from Test1 where Test1.dconsigndate ='2016-06-19';
 }
额 那个dconsigndate是Test1的字段名,记录的是时间, 能否看看 if里面该怎么写判断条件
mingqing6364 2016-08-12
  • 打赏
  • 举报
回复
1.SQL SERVER中首先要声明变量
DECLARE @i INT
变量名前面加一个@ 是局部变量,两个@ 是全局变量 局部变量在会话结束时失效,全局变量是系统预设好了的 详细介绍可以看http://blog.csdn.net/leamonjxl/article/details/6308959 2.SQL SERVER中不使用{},begin代替{,end代替} 3.while XXX begin end中begin前面不能有分号”;“ 4.你在if中写的 Test1.dconsigndate =='2016-06-18',更是不知道怎么修改 1)SQL中赋值和比较都是一个等号,赋值前面加SET,比较不加。 2)按我的理解Test1.dconsigndate应该是某个表的某一列,一列可能有多行数据,是一个集合的概念,怎么能和一个值比较?何况SQL从表中取数据必须使用 SELECT * FROM TABLE WHERE……这样的句式 总结一下:我的理解,SQL是一种面向数据集合的脚本语言,它能高效快速的帮助我们取得,运算,修改某一类数据;VC、VB之类的编程语言主要是处理某一个过程或对象;使用编程语言的思维方式去学习理解SQL,只会事倍功半。
引用 4 楼 uutt001 的回复:
[quote=引用 2 楼 kk185800961 的回复:] sql server 没有for循环,for 改为 while循环,内部逻辑都可用if …else 正常使用。
 set i = 1;
 while i<(select COUNT(*) from Test1);
 begin 
 set i = i+1;
 end
 if (Test1.dconsigndate =='2016-06-18')
 {
	Select * from Test1 where Test1.dconsigndate >='2016-06-18';
 }
 else if(Test1.dconsigndate =='2016-06-19')
 {
	Select * from Test1 where Test1.dconsigndate >='2016-06-19';
 }
这么写不行啊 [/quote]
uutt001 2016-08-12
  • 打赏
  • 举报
回复
引用 2 楼 kk185800961 的回复:
sql server 没有for循环,for 改为 while循环,内部逻辑都可用if …else 正常使用。
 set i = 1;
 while i<(select COUNT(*) from Test1);
 begin 
 set i = i+1;
 end
 if (Test1.dconsigndate =='2016-06-18')
 {
	Select * from Test1 where Test1.dconsigndate >='2016-06-18';
 }
 else if(Test1.dconsigndate =='2016-06-19')
 {
	Select * from Test1 where Test1.dconsigndate >='2016-06-19';
 }
这么写不行啊
uutt001 2016-08-12
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
for(表的总条数) 改用 set i = 1 ; while i <100 begin set i = i + 1 ; end
 set i = 1;
 while i<(select COUNT(*) from Test1);
 begin 
 set i = i+1;
 end
 if (Test1.dconsigndate =='2016-06-18')
 {
	Select * from Test1 where Test1.dconsigndate >='2016-06-18';
 }
 else if(Test1.dconsigndate =='2016-06-19')
 {
	Select * from Test1 where Test1.dconsigndate >='2016-06-19';
 }
哈哈 我这么写 语法全错 不知道该怎么改
卖水果的net 2016-08-12
  • 打赏
  • 举报
回复
for(表的总条数) 改用 set i = 1 ; while i <100 begin set i = i + 1 ; end
薛定谔的DBA 2016-08-12
  • 打赏
  • 举报
回复
sql server 没有for循环,for 改为 while循环,内部逻辑都可用if …else 正常使用。

22,302

社区成员

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

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