2011-07-08 28 views
8

Tengo un conjunto de archivos de audio con los nombres GreenLine1.mp3, GreenLine2.mp3 e.t.c. Voy a escribir en una tabla como BLOB (yo uso MS SQL Server'08), aquí está mi petición SQL:T-SQL: problema con la cadena 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; 

Tengo un error: Sintaxis incorrecta cerca de '+', esperando '' o ')'.

Si trato de escribir

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

en una variable y ponerlo después GRANEL, consigo sintaxis incorrecta cerca de @variable STRING, que se espera, o TEXT_LEX

Respuesta

11

No puedo introducción de parametros o concatenar la parámetros de OPENROWSET. Solo es valores constantes.

Vas a tener que utilizar SQL dinámico y una tabla temporal, o considerar el uso de SSIS por ejemplo

5

Este artículo me ha señalado en la dirección correcta cuando tuve el mismo problema con 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

Básicamente, puede envolver toda la instrucción en una variable (nvarchar), incluido openrowset, y ejecutar exec sp_executesql @sql. Sin embargo, es un poco feo leer todo el ' s, porque tendrás que escapar de ellos con ''.

+0

El enlace está roto. Es por eso que los enlaces chupan – Beanwah

+1

@Beanwah actualizado. –