Art*_*t F 44 sql t-sql sql-server temp-tables
我在SQL Server中有以下问题,我有一些看起来像这样的代码:
DROP TABLE #TMPGUARDIAN
CREATE TABLE #TMPGUARDIAN(
LAST_NAME NVARCHAR(30),
FRST_NAME NVARCHAR(30))
SELECT LAST_NAME,FRST_NAME INTO #TMPGUARDIAN FROM TBL_PEOPLE
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我收到一个错误'数据库中已经有一个名为'#TMPGUARDIAN'的对象'.谁能告诉我为什么我会收到这个错误?
Har*_* CO 65
您正在删除它,然后创建它,然后尝试使用再次创建它SELECT INTO
.改成:
DROP TABLE #TMPGUARDIAN
CREATE TABLE #TMPGUARDIAN(
LAST_NAME NVARCHAR(30),
FRST_NAME NVARCHAR(30))
INSERT INTO #TMPGUARDIAN
SELECT LAST_NAME,FRST_NAME
FROM TBL_PEOPLE
Run Code Online (Sandbox Code Playgroud)
在MS SQL Server中,您可以使用创建没有CREATE TABLE
语句的表SELECT INTO
gra*_*der 32
我通常把这些行放在我的存储过程的开头,然后在最后.
它是#temp表的"存在"检查.
IF OBJECT_ID('tempdb..#MyCoolTempTable') IS NOT NULL
begin
drop table #MyCoolTempTable
end
Run Code Online (Sandbox Code Playgroud)
您必须像这样修改查询
CREATE TABLE #TMPGUARDIAN(
LAST_NAME NVARCHAR(30),
FRST_NAME NVARCHAR(30))
INSERT INTO #TMPGUARDIAN(FRST_NAME,LAST_NAME)
SELECT LAST_NAME,FRST_NAME FROM TBL_PEOPLE
Run Code Online (Sandbox Code Playgroud)
- 建立最后一个会话以清除所有临时表.总是落在最后.在您的情况下,有时,如果表不存在,则在您尝试删除时可能会发生错误.
DROP TABLE #TMPGUARDIAN
Run Code Online (Sandbox Code Playgroud)
避免使用insert into 因为如果你想使用insert in将来修改temp表,你可以通过添加一个可以在某个进程之后填充的新列来修改(不是与insert一起).那时,您需要以相同的方式进行返工和设计.
使用表变量http://odetocode.com/articles/365.aspx
declare @userData TABLE(
LAST_NAME NVARCHAR(30),
FRST_NAME NVARCHAR(30)
)
Run Code Online (Sandbox Code Playgroud)
优点 不需要Drop语句,因为这与变量类似.范围在执行后立即结束.