我收到以下消息
Invalid object name #alert
备用运行具有以下代码的存储过程:
IF OBJECT_ID('tempdb..#alert') IS NOT NULL
DROP TABLE #alert
ELSE
create table #alert(order varchar(50))
BULK INSERT #alert
FROM 'C:\OrderImport\NewOne.txt'
WITH
(
FIELDTERMINATOR ='\t',
ROWTERMINATOR ='\n',
FIRSTROW = 2
)
答案 0 :(得分:2)
IF OBJECT_ID('tempdb..#alert') IS NOT NULL
DROP TABLE #alert
create table #alert(order varchar(50))
BULK INSERT #alert
FROM 'C:\OrderImport\NewOne.txt'
WITH
(
FIELDTERMINATOR ='\t',
ROWTERMINATOR ='\n',
FIRSTROW = 2
)
只需删除ELSE,它将检查表的存在性,如果确实存在,则将其删除,然后创建一个新的,您不需要和ELSE语句。因为如果它不存在,那么控制将跳转到ELSE块,但如果它确实存在,控制将进入IF块丢弃表并跳过ELSE块,因为在IF .. ELSE块中只执行一个代码块。
IF OBJECT_ID('tempdb..#alert') IS NOT NULL --<-- if not null
BEGIN
DROP TABLE #alert --<-- Drops the table
END
ELSE
CREATE TABLE --<-- This statement Never gets executed
-- since the control fell in the 1st block
-- it never goes into ELSE Block
如果你想使用IF.. ELSE
阻止,你可以做这样的事情......
IF OBJECT_ID('tempdb..#alert') IS NOT NULL
BEGIN
DROP TABLE #alert
create table #alert(order varchar(50))
END
ELSE
BEGIN
create table #alert(order varchar(50))
END
答案 1 :(得分:1)
每次运行SP时,您的逻辑都会导致#alert
被删除。第一次运行它时,它进入ELSE
块并创建#alert
表,因此其余的过程成功。下次运行时,它会进入IF
块并删除先前创建的表,因此BULK INSERT #alert
会失败。