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