2009-07-01 5 views

Répondre

1

officiellement, vous ne pouvez pas.

mais vous pouvez essayer cette astuce:

-- add 'loopback' linkedserver 
if exists (select * from master..sysservers where srvname = 'loopback') 
    exec sp_dropserver 'loopback' 
go 
exec sp_addlinkedserver @server = N'loopback', 
    @srvproduct = N'', 
    @provider = N'SQLOLEDB', 
    @datasrc = @@servername 
go 

select * from openquery(loopback, 'exec yourSproc') 
go 
+0

C'est la chose sketchiest que j'ai jamais vu . Je veux vous upvote, pas parce que je pense que c'est une bonne idée, mais parce que je respecte votre ingéniosité ... – SqlRyan

+0

upvote away cette méthode est effectivement utilisée pour des choses comme ça assez souvent et avec succès. –

0

Selon this article, l'une des limitations est que vous ne pouvez pas appeler un SP à partir d'une UDF. L'une des caractéristiques d'un FDU est qu'il est déterministe - l'appeler plusieurs fois avec les mêmes valeurs d'entrée donnera les mêmes valeurs de sortie (en supposant également que les données sous-jacentes ne changent pas). Si vous appelez d'autres objets à partir d'une fonction définie par l'utilisateur, SQL Server ne peut pas garantir que cela restera vrai - que l'UDF restera déterministe. Par exemple, si vous appelez un SP de votre FDU, même si le SP est actuellement déterministe (ne contient aucune fonction non déterministe, comme GETDATE), il n'y a aucune garantie que cela ne changera pas.

Pour une explication de ce que signifie être (non) déterministe, consultez wiki ou MSDN

Questions connexes