插入临时表的问题

时间:2018-05-23 16:52:46

标签: sql sql-server

我有两张桌子Profile& TokenState表,由名为TokenStateID smallint的列连接。 TokenState基本上是一个枚举表,其中每个TokenStateID都分配给某些TokenState char(2)

说清楚:

CREATE TABLE [AMS_APD].[TokenState] 
(
    [TokenStateID] SMALLINT    NOT NULL,
    [TokenState]   VARCHAR (2) NOT NULL,
);

我想加入Profile& TokenState并将结果存储在@ProfileTemp

的临时表中
INSERT INTO @ProfileTemp(prof.[Eavtoken], ts.[TokenState]) 
    SELECT 
        prof.[Eavtoken],
        ts.[TokenState]
(SELECT *
 FROM [AMS_APD].[Profiles]
 WHERE  SDHASH1 = @SDHASH1) prof -- @SDHASH1 stored proc. parameter
 INNER JOIN [AMS_APD].[TokenState] ts
     ON prof.TokenStateID =  ts.TokenStateID  

问题是行INSERT INTO @ProfileTemp(prof.[Eavtoken], ts.[TokenState])抛出异常:

  

警告SQL71502:过程:[AMS_APO]。[QueryProfileBySDHASH1]有一个未解析的对象[@ProfileTemp]的引用。[TokenState]。

1 个答案:

答案 0 :(得分:2)

()的内容应该是您要插入的列名,而不是您从中获取数据的位置。

INSERT INTO
  @ProfileTemp([TokenStateID], [TokenState]) 
SELECT
  prof.[Eavtoken],
  ts.[TokenState]
FROM
  <etc, etc>

假设您已经使用这些列名创建了表变量。

如果您想为自己创建表格,可以像这样创建临时表(与表变量略有不同) ......

SELECT
  prof.[Eavtoken]   AS TokenStateID,
  ts.[TokenState]   AS TokenState
INTO
  #ProfileTemp
FROM
  <etc, etc>