使用动态 SQL 时的 ORDER BY [已关闭]

ORDER BY when using Dynamic SQL [closed]

提问人:nehuh435 提问时间:11/15/2023 更新时间:11/15/2023 访问量:42

问:


这个问题是由错别字或无法再现的问题引起的。虽然类似的问题可能在这里是主题,但这个问题的解决方式不太可能帮助未来的读者。

6天前关闭。

在尝试对动态 SQL 的某个部分进行 ORDER BY 时,我一直遇到语法错误。

我对 SQL 有相当基本的了解,但这是我尝试过的(我不想包含整个代码),我在顶部正确声明了 SQL 和 DBName,并在底部使用了 EXEC:

SET @SQL = N'SELECT TOP 1
Test_Time,
Test_ID,
FROM ' + QUOTENAME(@DBName) + '.dbo.Event_Table'
ORDER BY Test_Time DESC

我只想知道这是否可行,或者我是否需要尝试另一种方法。问题出在 ORDER BY 中,因为没有它,代码可以完美运行。

sql-server

评论

4赞 Kostas Nitaf 11/15/2023
您必须将 ORDER BY 放在 sql 语句中,然后执行它+'ORDER BY Test_Time DESC'
0赞 Jiji 11/15/2023
分享您收到的确切错误。
0赞 Charlieface 11/15/2023
旁注:您不需要直接将数据库名称注入到查询中,您可以动态执行。你可以做sp_executesqlDECLARE @proc nvarchar(1000) = QUOTENAME(@DBName) + '.sys.sp_executesql'; EXEC @proc @SQL;
0赞 Xedni 11/15/2023
@Charlieface这如何简化事情呢?
0赞 Charlieface 11/15/2023
@Xedni 您不需要在整个位置上注入数据库名称,只需在过程名称中注入一次即可。

答:

1赞 Tim Jarosz 11/15/2023 #1

必须在文本字符串中,如下所示:ORDER BY@SQL

SET @SQL = N'SELECT TOP 1
Test_Time,
Test_ID,
FROM ' + QUOTENAME(@DBName) + '.dbo.Event_Table
ORDER BY Test_Time DESC'

(我只是将尾随撇号(')从后面移到后面一行。Event_TableDESC