问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

菜鸟求助~~~,一条数据库语句看不明白(高分回报)

发布网友 发布时间:2022-05-03 18:20

我来回答

3个回答

热心网友 时间:2022-05-03 19:50

sp_executesql 是系统存储过程
参数1是sql执行语句
参数2是返回值,通过output关键字返回给变量

可以通过返回值得知sql执行的结果0(成功)或 1(失败)

具体可以看SQL Server自带的帮助文档
sp_executesql
执行可以多次重用或动态生成的 Transact-SQL 语句或批处理。Transact-SQL 语句或批处理可以包含嵌入参数。

语法
sp_executesql [@stmt =] stmt
[
{, [@params =] N'@parameter_name data_type [,...n]' }
{, [@param1 =] 'value1' [,...n] }
]

参数
[@stmt =] stmt

包含 Transact-SQL 语句或批处理的 Unicode 字符串,stmt 必须是可以隐式转换为 ntext 的 Unicode 常量或变量。不允许使用更复杂的 Unicode 表达式(例如使用 + 运算符串联两个字符串)。不允许使用字符常量。如果指定常量,则必须使用 N 作为前缀。例如,Unicode 常量 N'sp_who' 是有效的,但是字符常量 'sp_who' 则无效。字符串的大小仅受可用数据库服务器内存*。

stmt 可以包含与变量名形式相同的参数,例如:

N'SELECT * FROM Employees WHERE EmployeeID = @IDParameter'

stmt 中包含的每个参数在 @params 参数定义列表和参数值列表中均必须有对应项。

[@params =] N'@parameter_name data_type [,...n]'

字符串,其中包含已嵌入到 stmt 中的所有参数的定义。该字符串必须是可以隐式转换为 ntext 的 Unicode 常量或变量。每个参数定义均由参数名和数据类型组成。n 是表明附加参数定义的占位符。stmt 中指定的每个参数都必须在 @params 中定义。如果 stmt 中的 Transact-SQL 语句或批处理不包含参数,则不需要 @params。该参数的默认值为 NULL。

[@param1 =] 'value1'

参数字符串中定义的第一个参数的值。该值可以是常量或变量。必须为 stmt 中包含的每个参数提供参数值。如果 stmt 中包含的 Transact-SQL 语句或批处理没有参数,则不需要值。

n

附加参数的值的占位符。这些值只能是常量或变量,而不能是更复杂的表达式,例如函数或使用运算符生成的表达式。

返回代码值
0(成功)或 1(失败)

结果集
从生成 SQL 字符串的所有 SQL 语句返回结果集。

热心网友 时间:2022-05-03 21:08

因为参数使用了output选项,说明这是一个输出参数,这个语句的目的应该是通过动态语句从“好朋友”表中读取记录的行数

select count(*) from 好朋友
的结果一样。
@num并不是没有起作用,而是你没有去使用它
可以用下边的语句看看@num的值
declare @num int, @sql nvarchar(4000)
set @sql='select @a=count(*) from 好朋友 '
exec sp_executesql @sql,N'@a int output',@num output
select @num

至于SQL方面的书,我跟很多其它人观点一样,SQL Server自带的联机丛书就是最好的资料,一点点看下来你会有收获的。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 求教:SQL中触发器、存储过程(SQL 2000) sql 触发器或存储过程问题求助 interbase开发问题:如何在触发器语句中获取当前登录的用户名? 想在SQL server做一个触发器:新建一个表来记录打开这个功能的操作者,记录当前登录应用系统的这个用户 sql触发器 获取用户名和ip 如何在SQL触发器中获取当前的 USERID 关于sqlServer2000和sqlServer2008的问题 sql2000升级到sql2008,客户端不能连接数据库 关于sql数据库由sql2000升级到sql2008的问题 Sql server2000的数据升级到sql server2008的问题:[Sql Server]找不到存储过程 SQL Server2000升级到SQL Server 2008,在升级规则这一步报错,求大神告知!!! 想从SqlServer2000升级到sqlserver2008,请问有什么注意事项 c#判断datatable中字段的值是否发生变化 有一张数据表,有三个字段(N行数据),用SQL判断如果第1字段有数据则将第1字段的数据显示到新字段上 触发器:当SQL插入或更新时判断写入值,当满足某条件后修改写入值,如何实现? SQL中更新字段if update(column_name)怎么获取被更新的column_name的值 mysql 先判断表中的某一字段 如果为空 插入数据 否则 更新该条数据 SQL触发器根据判定字段决定是否插入数据到另外一个数据表 如何判断列中的数据是否已经更改,如果更改了就触发触发器? oracle 修改一个表中数据 怎么判断哪个字段被修改 sql server中的存储过程问题 忘大家帮助 菜鸟级别 谢谢前辈指导!! asp Execute(include()) 的使用方法? T-SQL 新建数据可中的 N 是干社么用的 sql 2000修改sa密码时提示:未能找到存储过程 'sp_password'。 判断触发器正在处理的是插入,删除还是更新触发 sql serve里,有关触发器的函数deleted,Inserted文献?急 sql server 2005在使用触发器时,INSERTED表和DELETED表的作用是什么? SQL试题:哪种操作会导致触发器产生deleted表? SQL满足条件后自动更新一个置(SQL触发器)? C语言shellexecute函数的用法 sql Update时变量值为Default报错 ShellExecute,CreateProcess三个函数的区别和联系 如何阻塞调用ShellExecute函数 sqlserver如何带列名导出sql脚本 MS SQLServer 怎么将整个表的数据 生成 插入脚本 ? sqlserver导出脚本 有多大 在SQL Server 2005数据库中,对存储过程的描述正确的是()。(选一项) SQL server2005如何一次性插入多个存储过程 Sqlserver2005数据库如何写带参数的存储过程? sol server查询分析器中如何重命名存储过程