5

Microsoft SQL Server 2012 に適用している RODBC パッケージを使用しています。

今、私を困惑させる現象を発見しました。

RODBC コマンド sqlQuery を使用して次のクエリを実行すると、R では、Country、CID、PriceID、および WindID の列を含む空のデータ フレームが返されます。

DECLARE @tbl_IDs TABLE 
(
    Country nvarchar(30),
    CID nvarchar(5),
    PriceID int,
    WindID int
)

SELECT * FROM @tbl_Ids

これまでのところ、すべて問題ありません。

ただし、テーブル変数にレコードを書き込んで実行しようとすると

DECLARE @tbl_IDs TABLE 
(
    Country nvarchar(30),
    CID nvarchar(5),
    PriceID int,
    WindID int
)

INSERT INTO @tbl_IDs
VALUES 
    ('Germany', 'DE', 112000001, 256000002);

SELECT * FROM @tbl_Ids

次に、R では、結果は 1 つのレコードを持つデータフレームではなく空の文字になります。それでも、同じクエリが SQL Server Management Studio で完全に機能します。また、R-Query の実行中に DB サーバーの動作を追跡したところ、サーバーはそれを完全に処理しているようです。RODBC インターフェースは結果を R コンソールに返すのに問題があるようです。

この問題を解決する方法を知っている人はいますか?

4

2 に答える 2

9

NOCOUNT以下のように切り替えてみてください。

old_qry <- "
DECLARE @tbl_IDs TABLE 
(
    Country nvarchar(30),
    CID nvarchar(5),
    PriceID int,
    WindID int
)

INSERT INTO @tbl_IDs
VALUES 
    ('Germany', 'DE', 112000001, 256000002);

SELECT * FROM @tbl_Ids
"
##
new_qry <- "
SET NOCOUNT ON;
DECLARE @tbl_IDs TABLE 
(
    Country nvarchar(30),
    CID nvarchar(5),
    PriceID int,
    WindID int
);

INSERT INTO @tbl_IDs
VALUES 
    ('Germany', 'DE', 112000001, 256000002);
SET NOCOUNT OFF;
SELECT * FROM @tbl_Ids
"

R> sqlQuery(tcon, gsub("\\n", " ", old_qry))
#character(0)
R> sqlQuery(tcon, gsub("\\n", " ", new_qry))
#  Country CID   PriceID    WindID
#1 Germany  DE 112000001 256000002

基本的にSET NOCOUNT ONは、コードの先頭で、最後のステートメントSET NOCOUNT OFFの直前にします。SELECT

于 2015-10-28T16:22:34.780 に答える