2017-11-13 14 views
4

次のように私は、SQL Serverでテーブルを作成しました:IDENTITY主キーを持つSQL ServerテーブルにRの関数sqlSave()を使用してデータを追加する方法は?

CREATE TABLE testPK 
(
    ID INT NOT NULL IDENTITY (1, 1) PRIMARY KEY, 
    NumVal NUMERIC (18, 4) 
) 

は今、私は次のようにRODBC機能sqlSave()を使用してRプログラムからtestPKにデータを追加したい:

# Specify data to append 
test.dt <- data.table(NumVal = 1.0) 

# Assign connection 
myconn <- odbcDriverConnect(connectionString) 

# Append test.dt to SQL table testPK 
sqlSave(channel = myconn, dat = test.dt, tablename = 'testPK', 
     rownames = FALSE, append = TRUE) 

# Close connection 
odbcCloseAll() 

しかし、このリターンをエラーメッセージ

Error in odbcUpdate(channel, query, mydata, coldata[m, ], test = test, : 
    missing columns in 'data' 

IDENTIがデータテーブル内の列IDの値を提供していないため、 TYの指定により、SQLテーブルのその列に新しいレコードが追加されたときにSQL Serverによって一意の値が生成されます。どのようにしてRからこの結果を得ることができますか?

同じ質問がhereに掲載されましたが、解決策はありません。

答えて

0

sqlSave()を使用して解決策に到達できませんでした。そのため、SQLテーブルに任意の数の列を追加するために、hereの方法を使用しました。私の単一列データテーブルの場合、次のコードは望ましい結果を達成しました:

# Specify data to append 
test.dt <- data.table(NumVal = 1.0) 

# Assign connection 
myconn <- odbcDriverConnect(connectionString) 

# Concatenate the VALUES portion of the query 
values <- paste("(", test.dt$NumVal, ")", sep = "", collapse = ",") 

# Create the full query 
testQuery <- paste("INSERT INTO testPK (NumVal) VALUES", values) 

# Append test.dt to SQL table testPK 
sqlQuery(channel = myconn, query = testQuery) 

# Close connection 
odbcCloseAll() 
関連する問題