TSQL使用变量重新连接字符串文本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TSQL使用变量重新连接字符串文本相关的知识,希望对你有一定的参考价值。

我试图将下面代码的第三行(Set @ProjectBinary)中的文件夹位置替换为变量。

原始代码:

DECLARE @ProjectBinary as varbinary(max)
DECLARE @operation_id as bigint
Set @ProjectBinary = (SELECT * FROM OPENROWSET(BULK 'C:MyProjects SSISPackage_ProjectDeployment.ispac', SINGLE_BLOB) as BinaryData)

Exec catalog.deploy_project @folder_name = 'SSIS Packages', @project_name = 'DeployViaStoredProc_SSIS', @Project_Stream = @ProjectBinary, @operation_id = @operation_id out

我创建了一个变量:DECLARE @Location AS varchar(250)='C: SSIS DWH_IS.ispac'

DECLARE @ProjectBinary as varbinary(max)
DECLARE @operation_id as bigint
Set @ProjectBinary = ('SELECT * FROM OPENROWSET(BULK ' + @Location + ', SINGLE_BLOB') as BinaryData)

Exec catalog.deploy_project @folder_name = 'SSIS Packages', @project_name = 'DeployViaStoredProc_SSIS', @Project_Stream = @ProjectBinary, @operation_id = @operation_id out

我一直收到错误:消息257,级别16,状态3,行61不允许从数据类型varchar到varbinary(max)的隐式转换。使用CONVERT函数运行此查询。

有关如何更改此代码以获取代码运行的任何建议吗?

答案

您需要按如下方式细分

DECLARE @SQL nvarchar(1000), @ProjectBinary as varbinary(max);
SET @SQL = N'SELECT @Blob = (SELECT * FROM OPENROWSET(BULK ''' + @Location + ''', SINGLE_BLOB) as BinaryData)'
EXEC sp_executesql @SQL, N'@Blob varbinary(max) OUTPUT', @ProjectBinary OUTPUT;

线Set @ProjectBinary = (..不能动态或参数化

以上是关于TSQL使用变量重新连接字符串文本的主要内容,如果未能解决你的问题,请参考以下文章

从 TSQL 标量函数返回连接值

在 TSQL 中重新创建 s-s-rS 数据源以进行测试

关于TSql

了解并行 TSQL 连接

连接使用表值函数创建的表时优化 TSQL

Vscode在使用变量之前转义斜杠