T-SQL: проблема со строкой concat

У меня есть набор аудиофайлов с именами GreenLine1.mp3, GreenLine2.mp3 и т.д. Я собираюсь записать их в таблицу как BLOB (использую MS SQL Server'08), вот мой sql-запрос:

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;

У меня ошибка: Неправильный синтаксис рядом с «+», ожидается «,» или «)».

Если я попытаюсь написать

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

в переменную и помещаю ее после BULK, я получаю Неправильный синтаксис рядом с @variable, ожидаемой STRING или TEXT_LEX


person Ilya Blokh    schedule 08.07.2011    source источник


Ответы (2)


Вы не можете параметризовать или объединять параметры OPENROWSET. Это только постоянные значения.

Вам придется использовать динамический SQL и временную таблицу или рассмотреть возможность использования SSIS, например.

person gbn    schedule 08.07.2011

Эта статья указала мне правильное направление, когда у меня была такая же проблема с OPENQUERY:

https://web.archive.org/web/20120724073530/http://consultingblogs.emc.com/jamespipe/archive/2007/06/28/SQL-Server-2005_3A00_-Передача-переменных-в-an-OPENQUERY-argument.aspx

По сути, вы можете обернуть всю инструкцию в переменную (nvarchar), включая openrowset, и запустить exec sp_executesql @sql. Однако читать вокруг ' становится немного некрасиво, потому что вам придется избегать их с помощью ''.

person Trey Mack    schedule 16.07.2012
comment
Ссылка не работает. Вот почему ссылки отстой - person Beanwah; 13.02.2017