1
我想查询包含信息列表的PostgreSQL数据库,以便从MSSQL中简单计数当前记录。 PG服务器是MSSQL中的链接服务器。将postgres函数的结果返回为SQL存储过程作为参数
我对Postgre知之甚少,但足够危险。我创建了一个简单的查询驻留在函数内部,如下所示:
CREATE FUNCTION get_count(id text, division text, company integer, INOUT recCount integer) AS $$
BEGIN
recCount := (SELECT COUNT(0)
FROM test.inventory
WHERE inv_id = $1 AND div_code = $2 AND cmpy_no = $3);
END;
$$ LANGUAGE plpgsql;
我可以查询整天像这样:
SET @Query = 'SELECT test.get_count(''' + @Id+ ''', ''' + @Div + ''', ' + CAST(@Company AS VARCHAR) +', ?);'
EXEC (@Query) AT POSTGRESQLTEST;
但我不能把它分配给这样的变量:
SET @i = EXEC (@Query) AT POSTGRESQLPROD;
-- Error: Incorrect syntax near the keyword 'EXEC'.
办公室队友说存储在临时表中的值,查询它,然后放下它。恕我直言,但不是很有效,但它会完成工作。
那我还能做什么?我如何利用PG服务器的INOUT参数recCount?
'OPENQUERY'的第二个参数必须是只是一个字符串,它不可能是一个表达式。 (这意味着你不能直接参数化,如果你想参数化,你需要使它成为一个动态查询。) – 2012-04-27 17:49:13
解决了这个问题。 'SET \t @Query = N'SELECT test.get_count('''+ @Id +''','''+ @Div +''','+ CAST(@Company AS VARCHAR)+',0) ;” SET \t @Query = N'SELECT @RecCount = get_count FROM OPENQUERY(PostgreSQLPROD,'''+ REPLACE(@Query,'''',''''')+''')' --PRINT @查询 \t EXECUTE sp_executesql的 \t \t @Query \t \t,N '@ RECCOUNT INT输出' \t \t,@ RECCOUNT = @i输出; \t SELECT @i' 就是这么做的。谢谢你们! – sighlent 2012-04-27 19:44:47