【发布时间】:2019-01-01 08:37:30
【问题描述】:
我正在使用sqsh来执行一个存储过程:
我简化了这样的程序,以便您阅读:
CREATE PROCEDURE MyProc
AS
BEGIN
SELECT *
FROM Keys
WHERE 1=1
;WITH CTE AS
(
SELECT TOP 1 *
FROM MyTableName
ORDER BY CreationTime ASC
)
SELECT *
FROM CTE
END
;
go
我得到的错误是这样的:
Use: \go [-d display] [-h] [-f] [-n] [-p] [-m mode] [-s sec]
[-t [filter]] [-w width] [-x [xgeom]] [-T title] [xacts]
-d display When used with -x, send result to named display
-h Suppress headers
-f Suppress footers
-n Do not expand variables
-p Report runtime statistics
-m mode Switch display mode for result set
-s sec Sleep sec seconds between transactions
-t [filter] Filter SQL through program
Optional filter value overrides default variable $filter_prog
-w width Override value of $width
-x [xgeom] Send result set to a XWin output window
Optional xgeom value overrides default variable $xgeom
-T title Used in conjunction with -x to set window title
xacts Repeat batch xacts times
Msg 156, Level 15, State 1
Server 'myServer', Procedure 'MyProc', Line xx
Incorrect syntax near the keyword 'ORDER'.
这是未简化的版本:
CREATE PROCEDURE [dbo].[MyCustomProcedure]
@BatchSize INT WITH ENCRYPTION
AS
BEGIN
DECLARE @CurrentName varchar(max)
SET @CurrentName = [dbo].[GetCurrentyName]()
DECLARE @CurrentID INT
SELECT @CurrentID=ID FROM [dbo].[Keys] WHERE OriginalName = @CurrentName
;WITH CTE AS
(
SELECT TOP (@BatchSize) *
FROM [dbo].[SerialNumbers]
WHERE ID <> @CurrentID
ORDER BY CreationTime ASC
)
UPDATE CTE
SET EncodedSerial = (Encode(Key_GUID(@CurrentName), CONVERT(VARCHAR,(Decode(EncodedSerial))))),
ID=@CurrentID
END
;
go
我已经看过其他类似的问题。 我找不到语法有什么问题,还能是什么? SQLServer 版本?
【问题讨论】:
-
您的实际表名 (
MyTable) 是 SQL Server 保留字吗?同样,如果直接在 SQL Server 中运行该过程,是否会出现错误? -
不,
MyTable不是实际的表名。为了清楚起见,我更改了它不幸的是现在我无法直接在 SQL Server 中尝试 -
你已经简化了很多,你已经删除了错误。您发布的内容非常好。也许您应该分享实际代码?
-
反正我一开始觉得CTE的更新很奇怪。但这个技巧毕竟有效。 simple test here
-
decode()???您确定您使用的是 SQL Server?
标签: sql sql-server sql-server-2008 sqsh