sql语句中的exec语句什么时候用,是怎么用的啊
还有就是case when .............then 和if语句用法有区别吗 可以通用吗?
还有就是case when .............then 和if语句用法有区别吗 可以通用吗?
解决方案 »
- 外键约束,导致不能修改表怎么办
- 如何查询包含 “123” 排列组合的数据
- 求一触发器。请大家多帮忙!!!!!
- 有关游标嵌套的问题
- bookmark lookup是指什么样的查询?
- 当sqlserver的服务器的端口改成5550了后,远程怎样通过sqlserver的企业管理器连接?
- 求数值累加的值等于我输入的值,
- SQL SEVER7.0 用VB开发数据库,我的SELECT语句为什么在SQL SERVER管理中可以查询到记录,在程序中去不能(而且不不报错)
- 如何获得我所连接SQL SERVER实例的IP地址?
- Oracle存储过程
- SQL2005SCHEMA问题
- VS2005(Professional)下调试SQL server 2005存储过程的问题
if则是控制语句执行顺序的
set @s='select * from tb'
执行了上面两句后
exec @s
就和
select * from tb
命令是一样的结果了
declare @i int,@r int
set @i=8if @i<10 set @r=0 else set @r=1
select @r as r1set @r=case when @i<10 then 0 else 1 end
select @r as r2/**
r1
-----------
0(1 行受影响)r2
-----------
0(1 行受影响)
**/
问题是有的时候,我们需要用代码"拼接"出一个复杂的语句,存入一个串变量,再用exec执行这个串中的命令
常见的行列转换,当项目数不定时,就用的这种方法, 例如下:
if object_id('tb') IS NOT NULL
DROP TABLE tb
GOcreate table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
insert into tb values('张三' , '语文' , 74)
insert into tb values('张三' , '数学' , 83)
insert into tb values('张三' , '物理' , 93)
insert into tb values('李四' , '语文' , 74)
insert into tb values('李四' , '数学' , 84)
insert into tb values('李四' , '物理' , 94)
go
--SQL SERVER 2000 动态SQL,指课程不止语文、数学、物理这三门课程。(以下同)
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
from (select distinct 课程 from tb) asAS
PRINT @sql
set @sql = @sql + ' from tb group by 姓名'
exec(@sql)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
from (select distinct 课程 from tb) asAS
上面这段,就是在拼接命令串
exec(@sql)最终执行了该命令串
sql server的动态语句用法
http://blog.csdn.net/xys_777/archive/2010/06/24/5690909.aspx