2015-02-10 17 views
1

如何在從R向Microsoft SQL Server寫入數據時在列標題中保存空格?使用sqlsave保存列標題中的空格

請注意,我想在列名中使用空格,因爲這是一個關鍵字/短語與關鍵字/短語的關聯表。我可以將ID作爲列名稱,但最終用戶會希望看到列名稱與實際相同。 「go skateboard」和「goskateboard」是有區別的。

下面是一些代碼來澄清問題。

# Load RODBC package 
library(RODBC) 

# Connect to database (write database name in quoted area) 
con <- odbcConnect("") 

# Generate random matrix 
mat_test <- matrix(rnorm(12), 4, 3) 

# Label column headers 
colnames(mat_test) <- c("A","A B", "C") 

# Change matrix to dataframe 
df_test <- as.data.frame(mat_test) 

# View data frame. Note how there is a space in the column header labled "A B" 
View(df_test) 

# Write data frame to database. Why is the space gone? How do I preserve the space? 
sqlSave(con, df_test, tablename = "12_Test_12", rownames = FALSE, colnames = TRUE) 
+0

帶空格的名稱在R中不是語法上有效的列名。您可以擁有它們,但不應該。這就是爲什麼在'read.table'(它被設置爲默認'= TRUE')中有一個'check.names'參數的原因,還有一個叫做'make.names'的特殊函數。簡而言之,我對你的建議 - 不要創建這樣的名字,而是要克服它。 – 2015-02-10 21:19:39

回答

0

嘗試將列名更改爲「[A B]」。 SQL服務器有時不喜歡列名中的空格,除非它們被括在括號中。 編輯:我也許還應該提到,大多數人建議不要在列名中使用空格,因爲它可能很容易混淆並且通常需要更多工作,而常見的解決方案是使用下劃線代替:「A_B」。

+0

感謝您的回覆。我同意,通常我不希望列名中有空格。這裏的問題是每列都引用關鍵字或關鍵字詞組。我可以從ID標籤列;不過,我希望桌子更容易解釋。 – 2015-02-10 21:30:18

+0

使用'make.names' – 2015-02-10 21:41:18

+0

我無法評論David's R的具體信息。但是它可能有助於瞭解括號在SQL Server中用於指定名稱的特殊用法 - 如果要在sql server中創建名爲「[A B]」的列,它將顯示爲「A B」給用戶。 – TPhe 2015-02-10 22:18:37

相關問題