学习SQL应知道的动态SQL语句基本语法
学习SQL应知道的动态SQL语句基本语法
1 、普通SQL语句可以用Exec执行 Dl F< RR~
t&urAz u
eg: Select * from tableName " i-L ff
Exec('select * from tableName') iR w$L
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N V wep u)
tI ? ;6E^)
2、字段名,表名,数据库名之类作为变量时,必须用动态SQL OY8wB =N
Yw "+ qsy
eg: 0Vn'F:?6
declare @fname varchar(20) M#O6L'R@?8
set @fname = 'FiledName' YB}H]7k N
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 +h et CZW
Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格 iH8 f I.
p bC e qG
当然将字符串改成变量的形式也可 xQ9"{r s
declare @fname varchar(20) ]~Y , QL9`
set @fname = 'FiledName' --设置字段名 .BB 50hW
eQN9B `
declare @s varchar(1000) I ~ )U\
set @s = 'select ' + @fname + ' from tableName' ' tFz uHcL
Exec(@s) -- 成功 Gm>d0fByL|
exec sp_executesql @s -- 此句会报错 4_B$ WE=|
#rETf% MM
9 U142E
declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000) 1@ZF} HA1
set @s = 'select ' + @fname + ' from tableName' v Z jFO ES
Exec(@s) -- 成功 U $J bl=
exec sp_executesql @s -- 此句正确 tS A/G\
N)nm5 ~$ N
3、输出参数 j [n M9K
'P[6 6x
declare @num int, kh)v-J_
@sqls nvarchar(4000) e}5W*;eD*X
set @sqls='select count(*) from tableName' & SvdEdw><
exec(@sqls) + \}Z)
--如何将exec执行结果放入变量中? l{p 0: 6
twL+xk( C
declare @num int, 6JS FFa %s
@sqls nvarchar(4000) q/%< R~Ny\
set @sqls='select @a=count(*) from tableName ' { Q 'v@ ):
exec sp_executesql @sqls,N'@a int output',@num output g -M R7Gj
select @num '}l^+=$ c$
ajA iC y
此外,如果想要在SQL语句 字符串中使用 单引号 '' 可以 使用 ''''