动态sql语句基本语法
2015-09-16 15:03
316 查看
动态sql语句基本语法
1 :普通SQL语句可以用Exec执行
eg: Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N
2:字段名,表名,数据库名之类作为变量时,必须用动态SQL
eg:
declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格
当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'FiledName' --设置字段名
declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错
declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确
3. 输出参数
declare @num int,
@sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)
--如何将exec执行结果放入变量中?
declare @num int,
@sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num
EXEC(
'DECLARE @TB TABLE(ID INT,NAME VARCHAR(20));
INSERT @TB SELECT 1,''A'' UNION ALL SELECT 2,''B'';
DECLARE @ID INT;SET @ID=2;
SELECT * FROM @TB WHERE ID=@ID')
(所影响的行数为 2 行)
ID NAME
----------- --------------------
2 B
1 :普通SQL语句可以用Exec执行
eg: Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N
2:字段名,表名,数据库名之类作为变量时,必须用动态SQL
eg:
declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格
当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'FiledName' --设置字段名
declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错
declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确
3. 输出参数
declare @num int,
@sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)
--如何将exec执行结果放入变量中?
declare @num int,
@sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num
EXEC(
'DECLARE @TB TABLE(ID INT,NAME VARCHAR(20));
INSERT @TB SELECT 1,''A'' UNION ALL SELECT 2,''B'';
DECLARE @ID INT;SET @ID=2;
SELECT * FROM @TB WHERE ID=@ID')
(所影响的行数为 2 行)
ID NAME
----------- --------------------
2 B
相关文章推荐
- mysql的 函数 group_concat , substring_index 的使用以及 分库分表操作
- SQL中Merge的用法
- 安装12c遇到 Error in invoking target 'irman ioracle' of makefile
- SQLite三种JDBC驱动的区别
- SQL语句 where 1=1 && where 1<>1
- 解决远程连接mysql错误1130
- oracle 锁机制
- 【转】Redis入门
- mysql 中如何取得汉字字段的各汉字首字母, 并根据首字母进行查询
- 导入cx_Oracle时提示"DLL load failed"问题解决
- 虚拟机下Mysql不能远程连接解决方案
- IOS开发-数据库总结
- 谈谈Redis的SETNX
- Redis学习7之Predis连接redis过程和测试
- oracle11g空表不能导出记录
- redis自启动所需要的修改的
- Oracle数据库分页
- mongodb的状态分析
- [转载] Redis资料汇总专题
- sql总结梳理