问题描述
我有可用的 sql Server 代码,但无论我怎么努力都无法将其转换为 Firebird。我想在这件事上得到你的帮助。 sql Server 和 Firebird 所有表都一样,数据类型也一样。
sql Server“STOK_FIYAT”表设计
sql Server "STOK_FIYAT" 表数据
sql Server“STOK”表设计
sql Server“STOK”表数据
我的查询字符串:
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)
我必须为 Firebird 做所有的操作。
火鸟数据库:
Firebird“STOK”桌设计
火鸟“STOK_FIYAT”餐桌设计
我对 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 (将#修改为@)