在SSIS中使用临时表

时间:2009-09-17 20:17:15

标签: sql-server ssis temp-tables

我使用以下SQL命令创建了一个ADO.NET连接管理器和一个DataReader源:

select 
   'test' as testcol
INTO
   #tmp

select * from #tmp

如果我单击DataReader组件中的刷新按钮,我会收到SqlException“无效的对象名称#tmp”。 SQL语句本身显然有效,并在sql server management studio中正确执行。我也试过在连接管理器上设置DelayValidation,但没有用。

3 个答案:

答案 0 :(得分:2)

是INSERT还是SELECT的错误?

如果您只发出一个包含INSERT和SELECT的命令,请尝试在SELECT之前加一个分号。

OP评论后

编辑 封装存储过程中的所有逻辑:

CREATE PROCEDURE YourProcedureName
AS
select 
   'test' as testcol
INTO
   #tmp

select * from #tmp

GO

让您的应用程序运行此单个SQL命令:

exec YourProcedureName
下一次OP评论后

编辑

OP没有说明他们正在使用哪个SQL Server版本,如果是2005或以上,请尝试CTE:

;with CTEtemp as
(
select 
   'test' as testcol
)
select * from CTEtemp

答案 1 :(得分:0)

为什么不能将这个“SELECT”测试替换为testcol? SSIS查询解析器可能遇到问题,因为涉及临时表,它需要单个语句,而不是实际的SQL脚本。或者,如果您在上面分享的内容仅仅是一个示例,可能是这样的:

SELECT *
  FROM (SELECT 'test' AS testcol)

你能详细说明你在这里想要完成什么,如果是,为什么需要临时表?

答案 2 :(得分:0)

使用elemental.client.Browser.getDocument().getActiveElement()

你的命令将成为

sp_executesql

你必须使用nvarchar字符串(因此是N),并通过将它们加倍来转义单引号。

我和你有同样的问题,这就是我修复它的方法。