2011-07-08 5 views
8

J'ai un ensemble de fichiers audio avec des noms GreenLine1.mp3, GreenLine2.mp3 e.t.c. Je vais les écrire dans une table comme blob (j'utilise MS SQL Server'08), voici ma demande sql:T-SQL: problème avec chaîne concat

DECLARE @aud AS VARBINARY(MAX) 
DECLARE @num AS INT  
-- Load the audio data 
SET @num=1 
WHILE (@num<38) 
BEGIN; 

SELECT @aud = CAST(bulkcolumn AS VARBINARY(MAX)) 
     FROM OPENROWSET(
      BULK 
      'C:\Users\Ilya\folder\GreenLine' + CAST(@num AS VARCHAR) + '.mp3', 
      SINGLE_BLOB) AS x 

-- Insert the data to the table   
INSERT INTO Mb2.dbo.Audios (Id, [Content]) 
SELECT NEWID(), @aud 
SET @num = @num + 1 
END; 

J'ai une erreur: syntaxe incorrecte près de « + », expecting « » ou ')'.

Si je tente d'écrire

'C:\Users\Ilya\folder\GreenLine' + CAST(@num AS VARCHAR) + '.mp3'

dans une variable et le mettre après VRAC, je reçois une syntaxe incorrecte près @variable, STRING prévu, ou TEXT_LEX

Répondre

11

Vous ne pouvez pas paramétriser ou concaténer la paramètres de OPENROWSET. Ce sont des valeurs constantes seulement.

Vous devez utiliser SQL dynamique et une table temporaire, ou envisager d'utiliser SSIS par exemple

5

Cet article m'a orienté dans la bonne direction quand j'eu le même problème avec OPENQUERY:

https://web.archive.org/web/20120724073530/http://consultingblogs.emc.com/jamespipe/archive/2007/06/28/SQL-Server-2005_3A00_-Passing-variables-into-an-OPENQUERY-argument.aspx

Fondamentalement, vous pouvez envelopper l'instruction entière dans une variable (nvarchar), y compris le openrowset, et exécuter exec sp_executesql @sql. Il devient un peu moche de lire autour de la ' s cependant, parce que vous devrez leur échapper avec ''.

+0

Le lien est rompu. C'est pourquoi les liens sucent – Beanwah

+1

@Beanwah mis à jour. –