惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
云风的 BLOG
云风的 BLOG
大猫的无限游戏
大猫的无限游戏
M
MIT News - Artificial intelligence
L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Recent Announcements
Recent Announcements
IT之家
IT之家
Google DeepMind News
Google DeepMind News
罗磊的独立博客
爱范儿
爱范儿
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
U
Unit 42
MongoDB | Blog
MongoDB | Blog
S
SegmentFault 最新的问题
B
Blog
博客园 - 叶小钗
月光博客
月光博客
Stack Overflow Blog
Stack Overflow Blog
V
Visual Studio Blog
C
Check Point Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

博客园 - xumingming

C# 长浏览 SQL Server 的位运算 sql 的随机函数newID()和RAND() Linq To Xml (增,删,改,查) - xumingming Sql Server 存储过程分页 linq 存储过程返回多个结果集 Sql语句访问WEB 一些常用的类 MVC Controller与ActionResult的返回值 - xumingming - 博客园 IEnumerable_T_、IEnumerable、ICollection_T_、IList_T_、ObservableCollectin_T_和Collection_T_得关系 routes.MapRoute - xumingming - 博客园 JQuery与Ajax常用代码 MVC 小笔记 - xumingming - 博客园 GridView 的临时增删改查示例 GridView 72般绝技 C#代码中的事务 - xumingming - 博客园 VS2005中将GridView 中的数据导出至excel - xumingming - 博客园 触发器 删除数据库表中的信息(适用于被注入)
sp_executesql的用法
xumingming · 2010-03-16 · via 博客园 - xumingming

近日做项目中需要在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