sql - SQL 中的字符串连接不起作用

标签 sql sql-server t-sql exec openrowset

我想知道为什么以下不起作用:

INSERT INTO @Data2 (FileName,Field) 
SELECT @FileName as FileName, * FROM OPENROWSET(BULK  '\\serverpath\' + @FileName  , SINGLE_CLOB) AS Contents

我还尝试了第二种方法,但使用这种方法时,我收到了错误消息:该变量未声明:

declare @path nvarchar(255) = 'SELECT @FileName as FileName, * FROM OPENROWSET(BULK ''\\serverpath\' + @FileName + ''', SINGLE_CLOB) AS Contents'

INSERT INTO @Data2 (FileName,Field)
EXEC(@path)

有人可以帮忙吗? 谢谢

最佳答案

您无法使用exec@FileName作为FileName传递,但您可以使用sp_executesql - 但您仍然无法传递@FileName 作为 openrowset() 的一部分:

declare @path nvarchar(4000) = N'
  select @FileName as FileName, * 
  from openrowset(bulk ''\\serverpath\' + @FileName + '''
    , single_clob) as Contents'

insert into @Data2 (FileName,Field)
exec sp_executesql, N'@FileName nvarchar(1024))',@FileName

或者像bulk源一样直接连接它:

declare @path nvarchar(4000) = N'
  select '+quotename(@FileName,'''')+' as FileName, * 
  from openrowset(bulk '+quotename('\\serverpath\'+@FileName,'''')+'
    , single_clob) as Contents'

insert into @Data2 (FileName,Field)
exec sp_executesql @path

引用:

关于sql - SQL 中的字符串连接不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44457488/

相关文章:

mysql - MySQL中的空IN子句参数列表

sql-server - 更改 SQL Server 中的当前数据库路径

sql - 在 SQL Server 中创建层次结构

sql - 验证 varbinary 列的数据完整性

mysql - 如何缩短多个 LIKE

sql - MS SQL 临时表

sql - 基于一对多 SQL 连接排除记录

sql-server - 如何在没有文件的情况下备份启用大文件流的数据库

sql-server - 必须在sql server中声明标量变量

java - 约克: ArrayIndexOutOfBoundsException: -1