回答

收藏

             &

技术问答 技术问答 171 人阅读 | 0 人回复 | 2023-09-13

'')'EXEC (@sql)标准表工作正常,但现在我需要做同样的事情才能将数据加载到 临时    表中(例如#MyTable)。但当我尝试这个时,我犯了一个错误:* O& s# z8 K' t2 c! v% O
Invalid Object Name: #MyTable我认为这个问题是由以下事实引起的该BULKINSERT句子是动态构造的,然后用于执行EXEC,并且#MyTable在EXEC调用上下文是不可访问的。
1 ?8 \1 ?0 S2 J+ j& S之所以需要这样的结构?BULK INSERT句子,因为我需要在句子中插入文件名,这似乎是唯一的方法。所以,我似乎 既    可使用变量文件名,
) ^$ [( M" R9 T) G, J% a# S也可以    使用临时表,但不能同时使用。, }. k% ~4 E6 k  X9 J
有没有另一种方法可以实现这个目标?-也许通过使用OPENROWSET(BULK...)?/ P' d2 Y6 x' P5 p* ]$ V. r
更新:    好的,所以我听说批量插入和临时表对我不起作用。谢谢你的建议,但就我而言,将我的更多代码移动到动态中SQL部分不实用。( x/ @% p/ W0 \+ v& `: d. A
经过尝试OPENROWSET(BULK...),似乎也遇到了同样的问题,即它无法处理变量文件名,我需要像以前一样动态结构SQL语句(因此不能访问临时表)。6 h4 k6 O4 P  C1 y$ d. p! M
因此,这给我留下的唯一选择就是使用非临时表并以另一种方式实现进程隔离(通过确保在任何时候都只有一个进程可以使用表,我可以想到几种方法)去做)。
* X+ B7 X, N' J! W3 ?) O- H7 Y$ i$ y这很烦人。按照我最初的意图操作会更方便。这些事情中只有一件是微不足道的,但它最终浪费了你一整天…% ~1 h# T: R0 W7 U4 D9 V
                                                               
- Q' w; A, U* l! {7 }# v    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则