动态SQL语法
来源:互联网 发布:cad图纸加密软件 编辑:程序博客网 时间:2024/05/22 15:02
--动态语句方法:
--方法1查询表改为动态
select * from sysobjects
exec('select ID,Name from sysobjects')
exec sp_executesql N'select ID,Name from sysobjects'--多了一个N为unicode
--方法2:字段名,表名,数据库名之类作为变量时,用动态SQL
declare @FName varchar(20)
set @FName='ID'
exec('select '+@FName+' from sysobjects where '+@FName+'=5' )
declare @s varchar(1000)
set @s=N'select '+@FName+' from sysobjects where '+@FName+'=5'
exec sp_executesql @s--会报错
declare @s nvarchar(1000)--改为nvarchar
set @s=N'select '+@FName+' from sysobjects where '+@FName+'=5'
exec sp_executesql @s--成功
--方法3:输入参数
declare @i int,@s nvarchar(1000)
set @i=5
exec('select ID,Name from sysobjects where ID='+@i)
set @s='select ID,Name from sysobjects where ID=@i'
exec sp_executesql @s,N'@i int',@i--此处输入参数要加上N
--方法4:输出参数
declare @i int,@s nvarchar(1000)
set @s='select @i=count(1) from sysobjects'
--用exec
exec('declare @i int '+@s+' select @i')--把整个语句用字符串加起来执行
--用sp_executesql
exec sp_executesql @s,N'@i int output',@i output--此处输出参数要加上N
select @i
--方法5:输入输出
--用sp_executesql
declare @i int,@con int,@s nvarchar(1000)
set @i=5
select @s='select @con=count(1) from sysobjects where ID>@i'
exec sp_executesql @s,N'@con int output,@i int',@con output ,@i
select @con
--用exec
declare @i int,@s nvarchar(1000)
set @i=5
select @s='declare @con int select @con=count(1) from sysobjects where ID>'+rtrim(@i)+' select @con'
exec(@s)
----语法
1.什么时候用+号?
为了组成一个字符串类型的语句,要用+号作连接符。
一般情况下,字符串与字符串变量连接时才用加号。
如
DECLARE @SQL NVARCHAR(1000),@tablename nvarchar(100),@SORTFIELD NVARCHAR(100)
SELECT @TABLENAME=N'MYTABLE',@SORTFIELD=N'USERCODE'
SET @SQL=N'SELECT * from '+@tablename+N' order by '+@FIELDSORT '
这样的组成的SQL语句是:
SELECT * from MYTABLE order by USERCODE
2.什么时候用引号:
常数字符串都要用引号,如上面例子的N'SELECT * FROM '
3.什么时候用空格:
一般连接关键字的引号内侧要加一空格,如:
N'SELECT * from '+@tablename
FROM 后面要加空格,否则连接后会成为:
SELECT * FROMMYTABLE
FROM 和MYTABLE连起来了,从而出错。
4.其它要注意的:生成后字串中有引号的语句。
比如要生成这样一个语句
SELECT * FROM MYTABLE WHERE USERCODE=''
这样写是不对的:
SET @SQL=N'SELECT * from '+@tablename+' WHERE USERCODE='' '
这样才是对的:
SET @SQL=N'SELECT * from '+@tablename+' WHERE USERCODE=N'''' '
可以看出:
在字串中间的两个引号变成了4个。
总结一下:
语句中间需要显示出的引号,引号个数要加倍。
- 动态SQL语句语法
- 动态SQL语法
- -----------动态SQL基本语法------------
- 动态SQL基本语法
- 动态SQL语句语法
- 动态SQL语句语法
- 动态 sql 语法
- Oracle动态SQL语法
- sql动态基本语法
- MyBatis动态SQL语法
- 动态sql语句基本语法
- 动态sql语句基本语法
- 动态sql语句基本语法
- 动态sql语句基本语法
- 动态sql语句基本语法
- 动态sql语句基本语法
- 动态sql语句基本语法
- 动态sql语句基本语法
- RSA加密解密及RSA签名和验证
- 基于用户代理的缓存技术,对手机网站同样有效!
- 水晶报表中文问题
- 2009ACM多校联合暑期集训(1)——TJU专场
- Linux内核中自选锁API的选用
- 动态SQL语法
- 一个RFT频繁无响应的问题的解决
- 又一个秋天
- 回看精典Hibernate 学习笔记
- linux2.6 中关于中断flags IRQF_TIMER的含义
- 某银行的面试题
- C#中使用委托和事件实现观察者模式(observer pattern)
- J2ME颜色选择器
- C运行时库详解