`
joerong666
  • 浏览: 417818 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

sp_executesql接收返回多个参数实例

SQL 
阅读更多

 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
分享到:
评论

相关推荐

    SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别.doc

    `SP_EXECUTESQL`接受三个参数:动态SQL语句,参数定义字符串,以及参数值。参数定义和参数值必须按顺序匹配,并且动态SQL语句中的参数使用`@name`形式,这使得它可以处理输入和输出参数。 性能方面,`SP_EXECUTESQL...

    SQL Server EXEC和sp_executesql的区别

    综上所述,虽然`EXEC`在某些场景下提供了灵活性,但`sp_executesql`因其提供的额外功能(如参数化查询、输出参数支持)以及性能优势,在大多数情况下是更优的选择。除非有特殊需求使用`EXEC`,否则建议优先考虑使用`...

    系统存储过程,sp_executesql

    `sp_executesql`是SQL Server中的一个系统存储过程,用于执行可以动态生成或重复使用的Transact-SQL语句和批处理。这个过程对于运行基于输入参数的动态SQL非常有用,能够提高代码的可重用性和安全性,因为它有助于...

    在sp_executesql中使用like字句的方法

    这是关键步骤,`sp_executesql`接受三个参数: - 第一个参数是动态SQL语句本身。 - 第二个参数是一个参数列表的描述,指定了参数的名称和数据类型(`N'@LikePar as varchar(32)'`)。 - 第三个参数是参数值的...

    SQLServer:探讨EXEC与sp_executesql的区别详解

    在上面的示例中,如果使用 `EXEC`,每个不同的 `@OrderID` 值都会导致一个新的执行计划生成,而使用 `sp_executesql` 则可以避免这种情况。 除此之外,`sp_executesql` 还支持输入和输出参数,这使得在动态SQL中...

    动态SQL 并且把返回的值赋给变量

    本文将详细介绍如何利用`sp_executesql`来执行动态SQL,并重点讨论如何将执行结果赋值给变量,以及一些重要的注意事项。 #### 动态SQL与`sp_executesql` 动态SQL是指在运行时构建的SQL语句,这种类型的SQL可以在不...

    sp_executesql 使用复杂的Unicode 表达式错误的解决方法

    总之,当使用`sp_executesql`处理复杂的Unicode表达式时,应先构建完整的Unicode字符串,然后将其作为一个参数传递给存储过程。这不仅可以解决语法错误,还能提高代码的可读性和安全性。在处理动态SQL时,始终要注意...

    dynamic_sql.rar_notes sql server

    因此,使用sp_executesql并配合参数化是最佳实践。 2. **性能影响**:动态SQL需要在运行时解析和编译,可能导致额外的性能开销,尤其是在频繁执行相同语句时。 3. **调试困难**:由于SQL语句在运行时生成,调试起来...

    在Sql Server查询语句中能不能用变量表示表名

    这通常涉及将字符串拼接成完整的SQL命令,然后使用`EXEC`或`sp_executesql`存储过程来执行这个命令。下面是一个简单的例子: ```sql DECLARE @tableName NVARCHAR(100) = 'MyTable'; DECLARE @sqlCommand NVARCHAR...

    自己总结的MSSQL数据库技巧.pdf

    sp_executesql还支持输出参数,允许将查询结果返回给调用者。比如,要获取动态SQL的计数结果,可以这样做: ``` DECLARE @sql NVARCHAR(MAX), @rowCount INT; SET @sql = N'SELECT @rowCount = COUNT(*) FROM ...

    SQL通过SP_OA调用外部HTTP

    EXEC @HR = sp_OACreate N'MSXML2.XMLHTTP.6.0',@Object OUT; IF @HR &lt;&gt; 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR('Error Creating COM Component 0x%x, %s, %s',16,1, @HR, @...

    动态SQL语句基本语法。动态SQL语句基本语法

    Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL 错误: declare @fname varchar(20) set @fname = 'FiledName' Select ...

    带TOP参数的存储过程

    使用`sp_executesql`函数来执行这个动态SQL语句。 - **不推荐的做法**: ```sql set @sql='select @colName from @tbName where name=@whereName'; exec(@sql); ``` 这种方式不被推荐,因为它没有使用`sp_...

    sp_dboption.txt

    sp_dboption函数命令SQLserver2008以上版本适用 SQLserver2008以上版本,不再支持sp_dboption函数,但你可以下载sp_dboption函数,在master直接执行,后面就可以使用sp_dboption函数命令

    创建SP_WHO_LOCK死锁信息临时表然后执行 exec sp_who_lock.SQL

    创建SP_WHO_LOCK死锁信息临时表,查询数据库死锁信息,方便解决数据库锁库问题。

    sp_refreshview多刷新视图

    QLSERVER视图错位的解决办法,存储过程一键刷新所有视图,下载后根据需要使用如果只需要刷新单个的使用sp_refreshview刷新几个,此文件为.sql

Global site tag (gtag.js) - Google Analytics