我正在为某些供应商代码添加一节以从临时表中的数据创建文本文件并将其发送到网络位置。临时表是#PickListSQL Server 2008查询到文本文件中:bcp,动态SQL,临时表和表变量
我已经为表变量创建了一个表类型,所以我可以将它作为参数传递给动态SQL,但是这又需要传递给bcp来创建文本文件。这是我到目前为止有:
DECLARE @strFileLocation VARCHAR(1000)
DECLARE @strFileName VARCHAR(1000)
DECLARE @bcpCommand VARCHAR(8000)
DECLARE @strSQL VARCHAR(2000)
SET @strFileLocation = '\\phaal\FTP\LocalUser\LIFT01\inbox\'
SET @strFileName = 'BPL' + @Job + '-' + CAST(@Suffix AS VARCHAR(20)) + '-' +
CAST(@StartingOperNum AS VARCHAR(20)) + CAST(DATEPART(hh,GETDATE()) AS
VARCHAR(10)) + CAST(DATEPART(mi,GETDATE()) AS VARCHAR(10)) +
CAST(DATEPART(ss,GETDATE()) AS VARCHAR(10)) + '.txt'
DECLARE @tblLeanLiftData AS [dbo].[BWT_LeanLiftPickTableType]
INSERT INTO @tblLeanLiftData (intSeq, strText)
SELECT 0, @Job + '-' + CAST(@Suffix AS VARCHAR(20)) + '-' +
CAST(@StartingOperNum AS VARCHAR(20))
UNION
SELECT det_JobSequence, det_JobMatlItem + ':' + det_LotDescription + ',-,' +
CAST(det_QtyToPick AS VARCHAR(20))
FROM #PickList
SET @strSQL = 'EXEC sp_executesql N''SELECT strText FROM @tblLeanLiftData
ORDER BY intSeq'', N''@tblLeanLiftData LeanLiftPickTableType READONLY'',
@[email protected]'
SET @bcpCommand = 'bcp "' + @strSQL + '" queryout "'
SET @bcpCommand = @bcpCommand + @strFileLocation + @strFileName + '" -T -c'
EXEC master..xp_cmdshell @bcpCommand
当我执行的是代码,我得到:
SQLSTATE = 37000,NativeError = 137
错误= [微软] [SQL Server本机客户端10.0 ] [SQL Server]必须声明标量变量“@tblLeanLiftData”。
SQLState = 37000,NativeError = 8180
错误= [Microsoft] [SQL Server Native Client 10.0] [SQL Server]无法准备声明。
NULL
因此,表变量仍然超出范围。
我希望有人用清新的眼睛可以发现我出错或替代路线,或者如果这种方式是不可能的?
这是一把双刃剑,因为我尝试过各种方法,临时表或表变量最终超出范围。
对不起,亚历克斯,我从来没有回答你的答案。是的,谢谢你......它绝对有帮助。 – 2018-01-05 15:12:17
@MarkMcArdle感谢您接受它,值得等待:) – 2018-01-05 19:10:12