15

我有一组名为 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 附近得到不正确的语法

4

2 回答 2

19

您不能参数化或连接OPENROWSET的参数。它只是常数值。

您必须使用动态 SQL 和临时表,或者考虑使用 SSIS,例如

于 2011-07-08T08:07:31.563 回答
10

当我遇到与 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-参数.aspx

基本上,您可以将整个语句包装在一个变量 (nvarchar) 中,包括 openrowset,然后运行exec sp_executesql @sql​​. 但是,在 s 周围阅读会有点难看',因为您必须使用 . 来逃避它们''

于 2012-07-16T15:32:45.690 回答