执行 dbo.sp_executesql @statement

4

我创建了一些应用程序角色,并自动创建了以下SQL Server数据库:

declare @idx as int
declare @randomPwd as nvarchar(64)
declare @rnd as float
select @idx = 0
select @randomPwd = N''
select @rnd = rand((@@CPU_BUSY % 100) + ((@@IDLE % 100) * 100) + 
       (DATEPART(ss, GETDATE()) * 10000) + ((cast(DATEPART(ms, GETDATE()) as int) % 100) * 1000000))
while @idx < 64
begin
   select @randomPwd = @randomPwd + char((cast((@rnd * 83) as int) + 43))
   select @idx = @idx + 1
select @rnd = rand()
end
declare @statement nvarchar(4000)
select @statement = N'CREATE APPLICATION ROLE [AppRole_01] WITH DEFAULT_SCHEMA = [AppRole_01], ' + N'PASSWORD = N' + QUOTENAME(@randomPwd,'''')
EXEC dbo.sp_executesql @statement

GO 

现在我看到这里有 EXEC dbo.sp_executesql @statement ,但我不理解它是什么意思。

  1. 为什么要调用这个存储过程?
  2. 我已经在数据库服务器上搜索了一遍,没有发现任何名为sp_executesql的存储过程,特别是dbo.sp_executesql

有没有人可以指导我解决这个问题?


这是在[master]中的系统扩展过程。 - RBarryYoung
1个回答

4

这是一个SP系统,它与SQL Server一起提供。

http://technet.microsoft.com/en-us/library/aa933299(v=sql.80).aspx

您发布的查询正在创建动态SQL并执行它。
编辑 您使用的任何可视化工具来管理数据库都会在幕后创建这种命令并将其发送到引擎(并且一直在执行所有工作)。您可以通过运行分析器来查看它。
您无法找到该系统SP,这是很好的,因为这样就不容易在RDBMS中进行黑客攻击并进行危险操作。请不要尝试通过更新/更改系统对象来更改事物。

首先,我在我的SQL Server中找不到这个存储过程...其次,我所做的唯一一件事就是创建一个应用角色...那么这个存储过程产生了什么?与我的应用角色有关...我使用的是SQLServer 2008R2。 - Lefteris Gkinis
该过程执行存储在变量@statement中的查询。 - Hart CO
1
它使用CREATE APPLICATION ROLE.. SQL语句创建一个字符串,然后使用sp_ExecuteSQL将该字符串作为SQL命令执行。它不直接执行命令,因为它使用了前置的SQL命令来为AppRole(实际上是一种登录/用户)生成随机密码。 - RBarryYoung
@jean 非常感谢您的努力。我从未打算刮掉这个“sp”或任何其他“sp”,我只是好奇它在哪里...非常感谢您... - Lefteris Gkinis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接