T-SQL: проблема со строкой concat - PullRequest
11 голосов
/ 08 июля 2011

У меня есть набор аудиофайлов с именами 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, ожидаемая строкаили TEXT_LEX

Ответы [ 2 ]

14 голосов
/ 08 июля 2011

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

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

9 голосов
/ 16 июля 2012

Эта статья указала мне правильное направление, когда у меня возникла та же проблема с 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

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

...