1

我正在使用 SQL Server 2008 R2 (T-SQL) 并具有动态 SQL 代码,该代码将一些数据插入到临时表中。如果我在新查询窗口或 PRINT 代码中运行代码,然后在新查询窗口中运行一切都很好,但是如果我尝试从存储过程中运行它会抛出错误

Msg 156, Level 15, State 1, Procedure users, Line 3
Incorrect syntax near the keyword 'FROM'.

如果我删除行INSERT INTO #viewsTmp (webId, listId, viewName, viewTitle),代码运行良好。我在同一个存储过程中有类似的代码,并且该代码很好。

温度表:

CREATE TABLE #viewsTmp 
(
    webId uniqueidentifier,
    listId uniqueidentifier,
    viewName NVARCHAR(128),
    viewTitle NVARCHAR(255)
)

变量@databaseName 被声明为存储过程的参数

@databaseName NVARCHAR(255)

在新查询窗口中可以的代码,但如果从存储过程运行则不行:

SET @sql = N'
INSERT INTO #viewsTmp (webId, listId, viewName, viewTitle)
SELECT c.tp_WebId, c.tp_ID, b.LeafName, c.tp_Title
FROM (
    SELECT *
    FROM (
        SELECT [ListId], [LeafName], [Type], [WebId]
              ,ROW_NUMBER() OVER (PARTITION BY ListId ORDER BY DirName) AS RowNumber
          FROM ['+@databaseName+'].[dbo].[Docs]
          WHERE [LeafName] = ''users''
    ) AS a
    WHERE  [RowNumber] = 1 AND [Type] = 1
) AS b
INNER JOIN 
    (SELECT [tp_WebId], [tp_ID], [tp_Title] FROM ['+@databaseName+'].[dbo].[Lists]) 
    AS c 
    ON b.ListId = c.tp_ID AND b.WebId = c.tp_WebId

';
--PRINT @sql
exec sp_executesql @sql;

这段代码有什么问题?

4

1 回答 1

1

我按照 Dale Burrell 的建议逐步分解和组合代码,并进行了一些小的修改......并且代码运行和不运行。我不知道那是什么......最后我发现了一个我的错误......

代码本身没问题,但是我将@webId 作为参数来调用在代码之后调用的内部过程,并且出现错误。我有一个 webId 的所有行,但恰好有另一行(设计中的例外),我为这一行传递了与另一行相同的 webId,然后在这个子例程中出现错误。所以错误消息不是针对上面的代码,而是针对被调用过程中的某些代码...

哦,我的……5个小时的时间……

在各方面,非常感谢您的帮助!我今天学到了另一件事关于 T-SQL 中的错误。

于 2012-09-29T14:25:34.700 回答