sql - 存储过程: error near keyword FROM. Code in new query run flawlessly中的动态T-SQL

标签 sql tsql stored-procedures syntax-error dynamic-sql

我正在使用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;

此代码有什么问题?

最佳答案

正如Dale Burrell所建议的那样,我逐步分解并组成了代码,并进行了少量修改,然后代码运行并且不运行。我不知道那是什么...最后我发现了我的一个错误...

代码本身还可以,但是我给@webId作为参数来调用在代码之后被调用的内部过程,并且有错误。我的所有行都带有一个webId,而另一行恰好具有另一行(设计上的异常(exception)),我为此行传递了与另一行相同的webId,然后在此子例程中出现了错误。因此错误消息不是针对上面的代码的,而是针对调用过程中的某些代码的...

哦,我的... 5小时的时间....

无论如何,非常感谢您的帮助!
今天,我了解了有关T-SQL中错误的另一件事。

关于sql - 存储过程: error near keyword FROM. Code in new query run flawlessly中的动态T-SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12618771/

相关文章:

Mysql - 子查询有超过 1 行

sql - VB : Syntax error when trying to insert to database with SQL

sql-server - 在 WHERE 子句中使用可为空的列

sql - 如何用同一列中的最后一个 NOT NULL 值替换结果集中的 NULL?

date - 带有日期参数的存储过程

sql-server - 如何在SSIS中使用输出参数从存储过程执行sql任务

sql - access中每组sql的前n条记录

mysql - MySQL 的 T-SQL 连接器

sql - 存储过程参数值记录

php - MySQL 查询结果的第一行未显示在应有的位置