求动态SQL基本语法

来源:百度知道 编辑:UC知道 时间:2024/05/12 12:55:24
1:
普通SQL语句可以用Exec执行
eg: Select * from tableName
Exec('select * from tableName')
sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N

2:
字段名,表名,数据库名之类作为变量时,必须用动态SQL
eg:
declare @fname varchar(20)
set @fname = '[name]'
Select @fname from sysobjects -- 错误
Exec('select ' + @fname + ' from sysobjects') -- 请注意 加号前后的 单引号的边上要加空格
exec sp_executesql N' select ' + @fname + ' from sysobjects'
当然将字符串改成变量的形式也可
declare @s varchar(1000)
set @s = 'select ' + @fname + ' from sysobjects'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错

declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from sysobjects'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确,

3: 输出参数
eg:
declare @num,
@sqls
set @sqls='select count(*) from &

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