Babelfish for Aurora PostgreSQL 4.4.0中INSERT INTO @Tbl执行动态SQL报错
在Babelfish for Aurora PostgreSQL中解决EXEC动态SQL插入表变量的语法错误问题
你遇到的问题是Babelfish for Aurora PostgreSQL 4.4.0对SQL Server的INSERT INTO ... EXEC (@动态变量)语法支持不完善导致的——尽管该语法在SQL Server中可以正常运行,但当前版本的Babelfish无法解析这种直接将动态SQL执行结果插入表变量的写法。
解决方法
方案1:使用临时表替代表变量
Babelfish对临时表的INSERT ... EXEC支持更完善,将表变量替换为临时表即可解决问题:
CREATE TABLE #Tbl ( ID bigint, Seq bigint identity(1,1) ) DECLARE @sqltest nvarchar(max); SET @sqltest = 'SELECT 1'; INSERT INTO #Tbl (ID) EXEC (@sqltest) SELECT * FROM #Tbl DROP TABLE #Tbl
方案2:通过临时表中转数据(保留表变量)
如果业务逻辑必须使用表变量,可以先将动态SQL的执行结果存入临时表,再将数据插入目标表变量:
DECLARE @Tbl TABLE ( ID bigint, Seq bigint identity(1,1) ) DECLARE @sqltest nvarchar(max); SET @sqltest = 'SELECT 1'; -- 创建临时表存储动态SQL结果 CREATE TABLE #TempResult (ID bigint) INSERT INTO #TempResult EXEC (@sqltest) -- 将临时表数据插入表变量 INSERT INTO @Tbl (ID) SELECT ID FROM #TempResult SELECT * FROM @Tbl -- 清理临时表 DROP TABLE #TempResult
以上两种写法均可在Babelfish for Aurora PostgreSQL 4.4.0中正常执行,且行为与SQL Server一致。
内容的提问来源于stack exchange,提问作者fredrick lingard
相关产品推荐
相关产品推荐

