我创建了许多应用程序角色,并自动为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
,我无法理解
sp_executesql
,尤其是dbo.sp_executesql
有人通过这个问题引导我吗?
答案 0 :(得分:4)
这是一个系统SP。它附带SQL Server。
http://technet.microsoft.com/en-us/library/aa933299(v=sql.80).aspx
您发布的查询是创建动态SQL并执行它。
修改强> 用于管理数据库的任何可视化工具都是在窗帘后面创建这种命令并将其发送到引擎(并且它始终在完成所有工作)。您可以通过运行探查器来查看它。
你找不到那个系统SP而且它很好,因为这样就不容易在RDBMS中破解并做坏事。请不要尝试通过更新/更改系统对象来更改内容。