使用变量创建变量

时间:2014-04-02 12:07:28

标签: sql ssis dts

我有一个执行SQL任务,它找到数据库最新备份的路径并用它填充变量( User :: BackupFilePath

我想将其传递给另一个任务,该任务将生成一个还原数据库脚本并填充另一个用于还原数据库的变量。

Select (
'ALTER DATABASE [Database] SET SINGLE_USER WITH ROLLBACK IMMEDIATE

RESTORE DATABASE [Database] 
FROM  DISK = ''' + **BackupFilePath** + '''  WITH  FILE = 1, NOUNLOAD,  REPLACE,  STATS = 5 

ALTER DATABASE [Database] SET MULTI_USER
GO'
) as RestoreScript

然而,生成字符串的第二部分将返回此错误消息

[Execute SQL Task] Error: Executing the query "Select 'ALTER DATABASE [xxxx..." failed with the following error: "An error occurred while extracting the result into a variable of type (DBTYPE_I4)". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

我正在使用Visual Studio 2008专业版

2 个答案:

答案 0 :(得分:1)

到目前为止,看起来你遇到了一个简单的问题:你要设置的变量,你的命令字符串,需要是一个字符串数据类型。

您的错误消息提到DBTYPE_I4,这是一个长整数:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms711251%28v=vs.85%29.aspx

然而,您将命令字符串保存到的内容中,将是一个字符串类型,例如DBTYPE_STRDBTYPE_WSTR(请参阅上面的链接),这在SSIS中通常称为{{1} }(对于ASCII字符串)或DT_STR(对于Unicode字符串) - 请参阅以下链接:
http://technet.microsoft.com/en-us/library/ms141036.aspx

希望有帮助...

答案 1 :(得分:0)

一个可能的原因是第二个SQL任务(恢复)的属性'ResulSet'/ 确保将其设置为“无”