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

时间:2021-08-25 14:51:58
如题,sqlserver中能否用到for和if 语句,
比如;现在我通过查询得到了所有数据的总条数
for(表的总条数)
{
   if(表的条件 ==某某)
  {
      显示出符合条件的数据
   }
   else if(表的条件==某某)
   {
      显示出符合条件的数据
    }
}

能不能以这种逻辑来设计sql语句

9 个解决方案

#1


for(表的总条数)
改用

set i = 1 ; 
while  i <100 
begin
set i = i + 1 ; 
end

#2


sql server 没有for循环,for 改为 while循环,内部逻辑都可用if …else 正常使用。

#3


引用 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';
 }

哈哈 我这么写 语法全错 不知道该怎么改

#4


引用 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';
 }

这么写不行啊 

#5


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';
 }

这么写不行啊 

#6


引用 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';
 }

这么写不行啊 

其实我也不想这么写的
 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里面该怎么写判断条件 

#7


while可以做到for语句的实现,唯一就是,while似乎效率很低还容易出问题,所以我一般都是使用其他小技巧来实现循环

如cte递归,如select into ,insert into select ,update set from,delete from,基本都可以避免while的使用

#8



我觉得是否可以简化一下,因为sql处理数据的方式是集合,不是一条一条,所以,尽量不要一一条一条的方式来处理数据,这样会非常繁琐,且性能会比较差

#9


引用 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

#1


for(表的总条数)
改用

set i = 1 ; 
while  i <100 
begin
set i = i + 1 ; 
end

#2


sql server 没有for循环,for 改为 while循环,内部逻辑都可用if …else 正常使用。

#3


引用 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';
 }

哈哈 我这么写 语法全错 不知道该怎么改

#4


引用 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';
 }

这么写不行啊 

#5


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';
 }

这么写不行啊 

#6


引用 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';
 }

这么写不行啊 

其实我也不想这么写的
 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里面该怎么写判断条件 

#7


while可以做到for语句的实现,唯一就是,while似乎效率很低还容易出问题,所以我一般都是使用其他小技巧来实现循环

如cte递归,如select into ,insert into select ,update set from,delete from,基本都可以避免while的使用

#8



我觉得是否可以简化一下,因为sql处理数据的方式是集合,不是一条一条,所以,尽量不要一一条一条的方式来处理数据,这样会非常繁琐,且性能会比较差

#9


引用 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