EXEC dbo.sp_executesql @statement

J'ai créé un certain nombre de rôles d'application et automatiquement la database SQL Server a créé ce qui suit:

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 

Maintenant, je vois EXEC dbo.sp_executesql @statement et je ne peux pas comprendre

  1. Pourquoi appelle cette procédure?
  2. J'ai recherché le server de database et je n'ai trouvé aucune procédure sp_executesql particulier dbo.sp_executesql

Y a-t-il quelqu'un pour me guider à travers ce problème?

C'est un système SP. Il est livré avec vous SQL Server.

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

La requête que vous avez publiée crée un SQL dynamic et l'exécute.

Edit Tout outil visuel que vous utilisez pour gérer votre DB est, derrière les rideaux, créer ce type de command et l'envoyer au moteur (et fait-il tout le travail tout le time). Vous pouvez le voir en exécutant un profileur.

Vous ne pouvez pas find ce système SP et c'est bon parce que de cette façon, il n'est pas facile de pirater le SGBDR et de faire des choses désagréables. N'essayez même pas de changer les choses en mettant à jour / altérant les objects système.