2011-07-19 91 views
2

我已經分配了更改SQL表中某些數據列的任務(使用Sql CE Server 3.5,如果有的話)。SQL:更改表的數據列 - 保留列順序

這些表格由數百個逗號分隔的Excel文本文檔填充。

該代碼刺激了確定列的數據類型並創建表。

後來,我需要能夠回來並說,「不,具有'Y'和'N'的這一列需要更改爲布爾類型而不是字符類型。」

我找到了關於如何去掉Alter the Table(刪除一列並插入新列)的信息,但是我能否將表格的列恢復到它之前的列索引值,如「Insert At Index = X「?

enter image description here

回答

1

您可以只改變列的位置,然後您就不必擔心訂購它。

ALTER TABLE myTable 
ALTER COLUMN myColumn Boolean 
+0

這很簡短,足以測試:'數據轉換失敗。是否所有的數據都需要先刪除? – jp2code

+0

哦 - 是的,布爾只需要0或1 - 對不起,應該提到這一點。您可以在視圖中將其表示爲Y或N,或稍後選擇。 – Chains

+0

順便說一句 - 0 = false或no,1 = true或yes - 就大多數解釋而言。 – Chains

3

有沒有辦法在通過ALTER TABLE特定的索引添加一列。像Sql Server Management Studio和Visual Studio Premium數據庫工具這樣的工具可以做到這一點。但至少Visual Studio通過一種解決方法來做到這一點:

  1. 刪除與表相關的任何約束,包括指向它的FK。
  2. 使用臨時名稱下的新佈局創建表格。
  3. 移動所有數據(可能包括IDENTITY INSERT以保留IDENTITY列)
  4. 刪除原始表。
  5. 用臨時名稱重命名該表。
  6. 重新創建約束。

如果您有可能,我深深地推薦Visual Studio Premiums DB項目。它的部署引擎可以爲你自動處理。

+0

這就是我害怕的那種答案。我不這樣做足以證明VS Premium DB的合理性。 – jp2code

+0

如果不是那麼頻繁,您可以通過Management Studio手動完成。 –

0

有「骯髒伎倆」是這樣的:

Reset Identity Column Index

不過我,說實話,從來沒那麼做,引起爲什麼你需要關心的DB暗示下一個索引。可能是我錯過了一些東西,但爲什麼不建立你的數據庫關係你自己的 ID,你可以完全控制。

問候。

+0

我只是試圖這樣做,因爲客戶希望他的表格的順序與Excel CSV文件中的順序相同。對我來說,這似乎也毫無意義。 – jp2code

+0

確定,但您可以維護訂單要求,但擁有一個標識列+表格的所有列,包括您自己的標識。 – Tigran

+0

@dowvoter謹慎地解釋你的-1? – Tigran

1

有一對夫婦的方式來處理這個

  1. 請執行安德斯指出這是從頭
  2. 重新創建表不要依賴表的列順序。而是使用一個抽象層,例如Views。 (SQL視圖或.NET對象視圖)
  3. 不要刪除並重新列,但改變不是

這第三個選項是棘手的列,因爲你面前有ALTER更新值。 例如

Create table #temp (foo char(1), bar int) 
Insert into #temp VALUES ('Y', 0) 
Insert into #temp VALUES ('N', 1) 

UPDATE #temp 
SET foo = CASE WHEN foo = 'Y' THEN 1 ELSE 0 END 

ALTER table #temp alter column foo bit 
SELECT * FROM #temp 

這樣很容易。例如,將varchar(50)轉換爲日期時間會比較困難

+0

嗯...第三種選擇是我最初設定的,但不知道如何完成我開始的任務。像這樣的事情可以通過C#中的Visual Studio在T-SQL語句中執行? – jp2code

+0

@ jp2code。你可以像普通一樣用'SqlCommand.ExecuteNonQuery'來執行DDL。然而,它可能需要兩個陳述。一個將數據轉換爲Alter。不一定按照這個順序。 –

+0

@ jp2Code當然應該是SqlCeCommand –