您的位置:首页 > 数据库

execute sp_executesql 拼接sql 并执行

2011-08-24 22:49 459 查看
execute 执行拼接的sql

execute (sql) 表示执行字符串sql

execute sql 表示执行存储过程,名字为sql 的存储过程

这里主要说执行字符串sql

declare @value nvarchar(100);

declare @sql nvarchar(199);

set @sql = N'select TOP 1 name from admin where name= '+@value+''

execute (@sql)

这里不能执行待输出值的参数,可能是我不会写,如果有朋友能写告诉我下谢谢

下面 这个可以执行带输出值的参数

sp_executesql 执行拼接的sql

declare @value nvarchar(100);

declare @sql nvarchar(199);

DECLARE @ParmDefinition nvarchar(500);

set @sql = N'select TOP 1 @value= name from admin'

SET @ParmDefinition = N' @value varchar(30) OUTPUT'; -- 定义参数

exec sp_executesql @sql,@ParmDefinition, @value OUTPUT --@value OUTPUT 提供输出参数

SELECT @value

语法

sp_executesql [ @stmt = ] stmt
[
{, [@params=] N'@parameter_name data_type [ OUT | OUTPUT ][,...n]' }
{, [ @param1 = ] 'value1' [ ,...n ] }
]


stmt 也就执行的sql

包含 Transact-SQL 语句或批处理的 Unicode 字符串。stmt 必须是 Unicode 常量或 Unicode 变量。不允许使用更复杂的 Unicode 表达式(例如使用 + 运算符连接两个字符串)。不允许使用字符常量。如果指定了 Unicode 常量,则必须使用N 作为前缀。例如,Unicode 常量
N'sp_who' 是有效的,但是字符常量 'sp_who' 则无效。字符串的大小仅受可用数据库服务器内存限制。在 64 位服务器中,字符串大小限制为 2 GB,即
nvarchar(max) 的最大大小。

@params 也就是上边列子的 @ParmDefinition



SQL 语句或批处理不包含参数 @params 可以为空 ,若sql 中包含参数必须定义才参数 如列子中的 @value 必须定义 @value varchar(30) OUTPUT

@params1 输入参数 如列子中的 @value OUTPUT 应为这里没用到输入值,所以没有值,只有输出值 ,若要输入值 则可以写为@value=@value OUTPUT 如不需要输出 去掉所有 OUTPUT
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: