动态sql mysql_动态SQL语句_MySQL

1:普通SQL语句可以用Exec执行

eg: Select * from tableName

Exec(select * from tableName)

sp_executesql Nselect * 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 + @servername + .a.dbo.b

exec(@sqls)

我如何能将exec执行的结果存入变量@num中

declare @num int,

@sqls nvarchar(4000)

set @sqls=select @a=count(*) from +@servername+.a.dbo.b

exec sp_executesql @sqls,N@a int output,@num output

select @num

相关标签:用 动态

1:普通SQL语句可以用Exec执行 eg: Select * from tableName Exec(select * from tableName) sp_executesql Nselect * 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 + @servername + .a.dbo.b exec(@sqls) 我如何能将exec执行的结果存入变量@num中 declare @num int, @sqls nvarchar(4000) set @sqls=select @a=count(*) from +@servername+.a.dbo.b exec sp_executesql @sqls,N@a int output,@num output select @num 相关标签:用 动态
经验分享 程序员 微信小程序 职场和发展