我正在使用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;
此代码有什么问题?
答案 0 :(得分:1)
我逐步分解和编写代码,并进行了小修改,因为Dale Burrell建议......并且代码运行并且不运行。我不知道那是什么......最后我发现了一个我的错误......
代码本身没问题,但我给@webId作为参数来调用代码后调用的内部程序,并且有错误。我有一个webId的所有行,但是只有一行与另一个(设计中的例外)并且我传递了这一行与另一行相同的webId,然后在此子例程中出现错误。所以错误消息不是针对上面的代码,而是针对调用过程中的一些代码...
哦,我... ... 5个小时的时间......
在各方面,非常感谢您寻求帮助! 我今天在T-SQL中学到了另一件关于错误的事情。