现在的位置: 首页 > 综合 > 正文

execute sp_executesql 拼接sql 并执行

2013年08月20日 ⁄ 综合 ⁄ 共 1133字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.