我正在将ms sql server语句传递给hana sql语句。我有一个变量(Tab)类型表和一个变量字符串(查询)定义为:
Hana声明
CREATE TYPE "tab_table_TYPE" AS TABLE ("DocEntry" integer, "LineId" integer, "VisOrder" integer, "Object" nvarchar(20));
v_Tab tab_table_TYPE
query := 'SELECT [DocEntry],[LineId],[VisOrder] ,[Object] FROM [@INV_AFC]';
所以我试图将这个Ms Sql语句转换为Hana语句:
Ms Sql Server Statement
INSERT INTO @v_Tab([DocEntry],[LineId],[VisOrder],[Object]) exec (@query)
我希望使用一个内部表类型变量,它可以保存查询的结果集!
当我使用带有这句话的Sql Converter时显示以下错误:
- [注意:ErrorModifier] INSERT INTO语句不支持EXEC;使用EXEC('插入表格' + originalstatement)
- [注意:字符串] SAP HANA不支持InsertTarget
最后问题是:对于这种情况,Hana Sql语句的正确性如何?
答案 0 :(得分:2)
表类型创建的语法是正确的。我想你正试图在一个程序中执行查询。
在程序中,您有不同的选择。如果您的查询只是部分结果,并且您希望在查询的结果集上运行更多语句,则根本不需要初始化表变量。只需为结果集指定一个变量:
table_variable = SELECT DocEntry, LineId, VisOrder, Object FROM INV_AFC;
// Use table_variable for further statements, for example:
SELECT count(*) INTO resultSetCount FROM :table_variable;
如果您的查询已经是最终结果,您可以轻松定义输出变量并直接将结果集指定为输出变量。例如:
CREATE PROCEDURE "YOURSCHEMA"."SomeProcedureName" (
in someInputVariable1 NVARCHAR(255),
in someInputVariable2 BIGINT,
out tableVariable "YOURSCHEMA".tab_table_TYPE)
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER AS
BEGIN
tableVariable = SELECT DocEntry, LineId, VisOrder, Object FROM INV_AFC;
END;
当您调用此过程时,第3个参数将自动包含结果集:
call "YOURSCHEMA"."SomeProcedureName"('someString', 123, ?);