2024年4月19日发(作者:)

SQL EXEC 命令用法

EXEC命令有两个用法:执行一个存储过程,或者执行一个动态批次。批次是一个内容

为SQL语句的字符串。

例如:

declare @schemaName varchar(80),@tableName varchar(80),@objName

varchar(512);

set @schemaName='dbo';

set @tableName='Orders';

set @objName=@schemaName+'.'+@tableName;

exec('select count(*) from '+@objName);

注意,在exec的括号里,只允许是字符串变量、字符串常量存在。不允许在这里调用

函数或者使用case表达式。

下面的代码是错误的:

exec('select count(*) from '+quotename(@objName));

所以,基本的方法是将语句保存到一个变量里,例如:

set @sql='...';

exec(@sql);

这就不存在上述限制了。

1 ,EXEC没有接口

Exec的唯一输入是字符串。一个动态批次无权访问调用它的批次内所定义的局部变量:

declare @i int

set @i=1;

declare @sql varchar(255)

set @sql='select * from where rderid=@i';

exec(@sql);

出错:必须声明标量变量@i

原因还是@i不能放在''之内,它只能通过字符串连接动态的嵌入到SQL语句里:

set @sql='select * from where rderid='+cast(@i as

varchar(10));

变量与字符串连接会引发所谓的SQL注入安全隐患,如果变量包含了字符串。要防患