EXEC dbo.sp_executesql @statement

时间:2014-02-27 17:05:49

标签: sql sql-server stored-procedures

我创建了许多应用程序角色,并自动为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
  3. 有人通过这个问题引导我吗?

1 个答案:

答案 0 :(得分:4)

这是一个系统SP。它附带SQL Server。

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

您发布的查询是创建动态SQL并执行它。

修改 用于管理数据库的任何可视化工具都是在窗帘后面创建这种命令并将其发送到引擎(并且它始终在完成所有工作)。您可以通过运行探查器来查看它。

你找不到那个系统SP而且它很好,因为这样就不容易在RDBMS中破解并做坏事。请不要尝试通过更新/更改系统对象来更改内容。