微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 SQL Server 代码转换为 Firebird 会产生“令牌未知”错误

如何解决将 SQL Server 代码转换为 Firebird 会产生“令牌未知”错误

我有可用的 sql Server 代码,但无论我怎么努力都无法将其转换为 Firebird。我想在这件事上得到你的帮助。 sql Server 和 Firebird 所有表都一样,数据类型也一样。

sql Server 数据库

sql Server“STOK_FIYAT”表设计

SQL Server "STOK_FIYAT" Table Design

sql Server "STOK_FIYAT" 表数据

SQL Server "STOK_FIYAT" Table Data

sql Server“STOK”表设计

SQL Server "STOK" Table Design

sql Server“STOK”表数据

SQL Server "STOK" Table Data

我的查询字符串:

DECLARE @cols AS NVARCHAR(MAX),@query  AS NVARCHAR(MAX),@ColumnNameCollection AS NVARCHAR(MAX),@HeaderNameCollection AS NVARCHAR(MAX);

SET @cols = STUFF((SELECT ',' + QUOTENAME(SF.FIYAT_NO)
            FROM STOK_FIYAT SF
      GROUP BY SF.FIYAT_NO
      ORDER BY SF.FIYAT_NO ASC
            FOR XML PATH(''),TYPE
            ).value('.','NVARCHAR(MAX)'),1,'')

-- Get header list. A disTINCT list of CompMesoIDs
SELECT @HeaderNameCollection= ISNULL(@HeaderNameCollection + ',','') 
       + QUOTENAME(FIYAT_NO) + ' as FIYAT_' + CAST(FIYAT_NO AS VARCHAR(16))
FROM (SELECT FIYAT_NO FROM STOK_FIYAT) AS STFIYAT 
GROUP BY STFIYAT.FIYAT_NO
ORDER BY STFIYAT.FIYAT_NO

set @query = 'SELECT BLKODU,STOKKODU,STOK_ADI,'+@HeaderNameCollection+'  FROM (SELECT STOK.[BLKODU],[STOKKODU],[STOK_ADI],[FIYAT_NO],[FIYATI] FROM STOK LEFT JOIN STOK_FIYAT ON STOK.BLKODU = STOK_FIYAT.BLSTKODU) AS SourceTable PIVOT(MAX([FIYATI]) FOR [FIYAT_NO] IN('+@cols+')) AS Pivottable ORDER BY BLKODU ASC;'
execute(@query)

sql 输出

SQL Server output

我必须为 Firebird 做所有的操作。

火鸟数据库

Firebird“STOK”桌设计

Firebird "STOK" Table Design

火鸟“STOK_FIYAT”餐桌设计

Firebird "STOK_FIYAT" Table Design

我对 Firebird 没有经验。我自己试过的代码

SET TERM ^ ;

EXECUTE BLOCK
AS
DECLARE cols VARCHAR(255);
DECLARE query VARCHAR(255);
DECLARE ColumnNameCollection VARCHAR(255);
DECLARE HeaderNameCollection VARCHAR(255);

BEGIN

cols = STUFF((SELECT ','VARCHAR(255)'),'')

SELECT :HeaderNameCollection= ISNULL(:HeaderNameCollection + ','+:HeaderNameCollection+'  FROM (SELECT STOK.[BLKODU],[FIYATI] FROM STOK LEFT JOIN STOK_FIYAT ON STOK.BLKODU = STOK_FIYAT.BLSTKODU) AS SourceTable PIVOT(MAX([FIYATI]) FOR [FIYAT_NO] IN('+:cols+')) AS Pivottable ORDER BY BLKODU ASC;'
execute(@query)

END
^

set term ; ^

我得到的错误

Engine Error (code = 335544569):
Dynamic sql Error.
sql error code = -104.
Token unkNown - line 14,column 13.
FOR.

sql Error (code = -104):
Invalid token.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。