T-SQL, Charger des données XML dans une variable locale

Je voudrais savoir, comment puis-je charger le contenu XML à partir d'un file arbitraire dans une variable locale?

Cela fonctionne pour un file fixe:

DECLARE @xml XML SET @xml = ( SELECT * FROM OPENROWSET(BULK 'C:\data.xml', SINGLE_BLOB) AS data ) 

Cependant, je voudrais charger datatables de n'importe quel file arbitraire.

Cela ne fonctionne pas (car BULK semble uniquement prendre en charge les arguments Ssortingng)

 DECLARE @file NVARCHAR(MAX) = 'C:\data.xml' DECLARE @xml XML SET @xml = ( SELECT * FROM OPENROWSET(BULK @file, SINGLE_BLOB) AS data ) 

J'ai également essayé ce qui suit (sans succès, car la variable locale (@xml) semble être hors de scope lors de l'exécution de l'EXEC):

 DECLARE @file NVARCHAR(MAX) = 'C:\data.xml' DECLARE @xml XML DECLARE @bulk NVARCHAR(MAX) = 'SET @xml = (SELECT * FROM OPENROWSET(BULK ''' + @file + ''', SINGLE_BLOB) AS data)' EXEC (@bulk) 

Je devine que je dois utiliser une table temporaire, mais comment?

Trouvé une solution:

 DECLARE @results table (result XML) DECLARE @sqlstmt NVARCHAR(MAX) SET @sqlstmt= 'SELECT * FROM OPENROWSET ( BULK ''' + @file + ''', SINGLE_CLOB) AS xmlData' INSERT INTO @results EXEC (@sqlstmt) SELECT @xml = result FROM @results 

vous pouvez également utiliser sp_executesql :

 declare @stmt nvarchar(max), @xml xml select @stmt = ' set @xml = (select * from openrowset(bulk ''' + @file + ''', single_clob) as data) ' exec dbo.sp_executesql @stmt = @stmt, @params = '@xml xml output', @xml = @xml output