sp_executesql接收返回多个参数实例
<script></script>
近日做项目中需要在EXEC执行Sql字符串时动态的传入参数并接收返回值,于是研究了一下SqlServer中sp_executesql的使用方法,并做了如下的例子。
在使用sp_executesql动态传入与接收返回参数时需注意以下事项,以避免大家走弯路。
例子中@SQLString,@ParmDefinition一定要使用NVARCHAR类型,否则会报“过程需要参数 '××××' 为 'ntext/nchar/nvarchar' 类型。”错误。
文档中说这两个变量赋值的字符串前要加N,我试了试,没加也不报错,不过你最好加上。毕竟人家是官方文档么。
--传递一个Int类型参数
DECLARE @IntVariable INT
DECLARE @SQLString NVARCHAR(500)
DECLARE @ParmDefinition NVARCHAR(500)
SET @SQLString = N'SELECT * FROM pubs.dbo.employee WHERE job_lvl = @level'
SET @ParmDefinition = N'@level tinyint'
SET @IntVariable = 35
EXECUTE sp_executesql @SQLString, @ParmDefinition,@level = @IntVariable
--SET @IntVariable = 32
--EXECUTE sp_executesql @SQLString, @ParmDefinition,@level = @IntVariable
-------------------------------------------------------------------------------
--传递一个varchar类型参数
DECLARE @VarVariable varchar(500)
DECLARE @SQLString NVARCHAR(500)
DECLARE @ParmDefinition NVARCHAR(500)
SET @SQLString = N'SELECT * FROM pubs.dbo.employee WHERE fname = @VarVariable'
SET @ParmDefinition = N'@VarVariable varchar(500)'
SET @VarVariable = 'Helen'
EXECUTE sp_executesql @SQLString, @ParmDefinition,@VarVariable
-------------------------------------------------------------------------------
--传递两个参数,一个varchar类型参数接收返回值,一个Int类型参数
DECLARE @VarVariable VARCHAR(500)
DECLARE @IntVariable INT
DECLARE @SQLString NVARCHAR(500)
DECLARE @ParmDefinition NVARCHAR(500)
SET @SQLString = N'SELECT @VarVariable = Count(*) FROM pubs.dbo.employee WHERE job_lvl = @IntVariable'
SET @IntVariable = 35
SET @ParmDefinition = N'@VarVariable VARCHAR(500) OUT,@IntVariable INT'
SET @VarVariable = 'Helen'
EXECUTE sp_executesql @SQLString,@ParmDefinition,@VarVariable OUT,@IntVariable
print @VarVariable
分享到:
相关推荐
`SP_EXECUTESQL`接受三个参数:动态SQL语句,参数定义字符串,以及参数值。参数定义和参数值必须按顺序匹配,并且动态SQL语句中的参数使用`@name`形式,这使得它可以处理输入和输出参数。 性能方面,`SP_EXECUTESQL...
综上所述,虽然`EXEC`在某些场景下提供了灵活性,但`sp_executesql`因其提供的额外功能(如参数化查询、输出参数支持)以及性能优势,在大多数情况下是更优的选择。除非有特殊需求使用`EXEC`,否则建议优先考虑使用`...
`sp_executesql`是SQL Server中的一个系统存储过程,用于执行可以动态生成或重复使用的Transact-SQL语句和批处理。这个过程对于运行基于输入参数的动态SQL非常有用,能够提高代码的可重用性和安全性,因为它有助于...
这是关键步骤,`sp_executesql`接受三个参数: - 第一个参数是动态SQL语句本身。 - 第二个参数是一个参数列表的描述,指定了参数的名称和数据类型(`N'@LikePar as varchar(32)'`)。 - 第三个参数是参数值的...
在上面的示例中,如果使用 `EXEC`,每个不同的 `@OrderID` 值都会导致一个新的执行计划生成,而使用 `sp_executesql` 则可以避免这种情况。 除此之外,`sp_executesql` 还支持输入和输出参数,这使得在动态SQL中...
本文将详细介绍如何利用`sp_executesql`来执行动态SQL,并重点讨论如何将执行结果赋值给变量,以及一些重要的注意事项。 #### 动态SQL与`sp_executesql` 动态SQL是指在运行时构建的SQL语句,这种类型的SQL可以在不...
总之,当使用`sp_executesql`处理复杂的Unicode表达式时,应先构建完整的Unicode字符串,然后将其作为一个参数传递给存储过程。这不仅可以解决语法错误,还能提高代码的可读性和安全性。在处理动态SQL时,始终要注意...
因此,使用sp_executesql并配合参数化是最佳实践。 2. **性能影响**:动态SQL需要在运行时解析和编译,可能导致额外的性能开销,尤其是在频繁执行相同语句时。 3. **调试困难**:由于SQL语句在运行时生成,调试起来...
这通常涉及将字符串拼接成完整的SQL命令,然后使用`EXEC`或`sp_executesql`存储过程来执行这个命令。下面是一个简单的例子: ```sql DECLARE @tableName NVARCHAR(100) = 'MyTable'; DECLARE @sqlCommand NVARCHAR...
sp_executesql还支持输出参数,允许将查询结果返回给调用者。比如,要获取动态SQL的计数结果,可以这样做: ``` DECLARE @sql NVARCHAR(MAX), @rowCount INT; SET @sql = N'SELECT @rowCount = COUNT(*) FROM ...
EXEC @HR = sp_OACreate N'MSXML2.XMLHTTP.6.0',@Object OUT; IF @HR <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR('Error Creating COM Component 0x%x, %s, %s',16,1, @HR, @...
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL 错误: declare @fname varchar(20) set @fname = 'FiledName' Select ...
使用`sp_executesql`函数来执行这个动态SQL语句。 - **不推荐的做法**: ```sql set @sql='select @colName from @tbName where name=@whereName'; exec(@sql); ``` 这种方式不被推荐,因为它没有使用`sp_...
sp_dboption函数命令SQLserver2008以上版本适用 SQLserver2008以上版本,不再支持sp_dboption函数,但你可以下载sp_dboption函数,在master直接执行,后面就可以使用sp_dboption函数命令
创建SP_WHO_LOCK死锁信息临时表,查询数据库死锁信息,方便解决数据库锁库问题。
QLSERVER视图错位的解决办法,存储过程一键刷新所有视图,下载后根据需要使用如果只需要刷新单个的使用sp_refreshview刷新几个,此文件为.sql