我已经在线查看,你不能轻易地将变量放入一个打开的查询中,所以我修改了我的查询,它说#TempOT临时表是“无效的对象名称'#TempOT'。”我做错了什么导致临时表不会被填充?
BEGIN
IF OBJECT_ID('tempdb..#TempOT') IS NOT NULL
BEGIN
DROP TABLE #TempOT
END;
DECLARE @TSQL As varchar(1024)
DECLARE @AS400Query As varchar(1024)
SET @AS400Query = 'SELECT * from blah.blahlibrary.AS400Table where DATETS BETWEEN '+ @BegofMonthForAS400 + ' AND ' + @DateForAS400
SET @TSQL = 'SELECT * FROM OPENQUERY(ISERIES,' + '''' + @AS400Query +'''' + ')'
INSERT INTO #TempOT
EXEC(@TSQL)
END
我也尝试了这个并且它不起作用
BEGIN
IF OBJECT_ID('tempdb..#TempOT') IS NOT NULL
BEGIN
DROP TABLE #TempOT
END;
DECLARE @TSQL As varchar(1024)
DECLARE @AS400Query As varchar(1024)
SET @AS400Query = 'SELECT * from valdosta.PRDATA.PRTIMELM where DATETS BETWEEN '+ @BegofMonthForAS400 + ' AND ' + @DateForAS400
SET @TSQL = ' INSERT INTO #TempOT SELECT * FROM OPENQUERY(ISERIES,' + '''' + @AS400Query +'''' + ')'
EXEC(@TSQL)
END
答案 0 :(得分:2)
您删除TEMP表,然后尝试将数据插入其中。 您需要先在脚本中创建TEMP表。
答案 1 :(得分:0)
问题实际上是您在EXEC
语句中创建临时表。在批处理执行后立即删除创建的表#TempOT
,并且主查询不可见。至少有两种可能性(如果你想使用临时表):
不是创建本地临时表,而是在表名之前创建带有##
的全局临时表(解释它们之间的差异为here)。在我看来,您应该在主查询结束时删除此表。
使用#TempOt
语句之前的所有列创建EXEC
,您可以毫无问题地使用所需数据填充表#TempOt
。