2012-04-18 107 views
0

我的SQL Server表的結構是:插入查詢2005

BranchName 
BranchManagerName 
Address 
Zip Info 
PhoneNo 
FaxNo 
Email 
Status 
CreatedOn 

現在我嘗試通過值Zip Info柱像State=XXXXcity=YYYYZip=123三個值。

我需要存儲在Zip Info列在SQL表格式state,city-Zipxxxx,yyyy-123)這三個值(State,City,Zip)。

如何在SQL Server 2005中編寫插入查詢?

+3

你試過了什麼?以及爲什麼要將zip郵件信息存儲在一個字段中? – Taryn 2012-04-18 12:59:57

+1

只是爲了支持KM的回答:**不要這樣做!!! **不要考慮它....這些是**三個非常獨特的**信息片段 - **不要**將它們連接在一起以儲存它們 - 遲早 - 最可能更快 - 您必須再次將它們分開!如果你有*三個不同的**信息 - 使用**三個單獨的列**!有一個「州」列,一個「城市」列和一個「ZipCode」列。如果你需要某處的「複合」表示 - 從三個獨立的部分開始構建它! – 2012-04-18 13:49:52

回答

7

否否否NOOOOOOO!

不這樣做!將它們保存爲單獨的列。切勿將多個字段存儲在單個列中!

你必須嘗試選擇State='NY',在那裏你會需要不斷地做字符串操作,並具有慢速非索引搜索的所有行的問題。

將它們存儲爲單獨的列,並在顯示它們時連接它們。

SELECT 
    ISNULL(State,'')+ISNULL(', '+city,'')+ISNULL('-'+Zip,'') AS ZipInfo 
    FROM YourTable 

你總是可以串聯在插入字符串:

INSERT INTO YourTable 
     (col1, col2, col3, Col123) 
    VALUES 
     (@col1, @col2, @col3, @col1+', '[email protected]+'-'[email protected]) 

你的「零保護」會有所不同需要,在SELECT,我認爲你可以有NULL值,在INSERT我承擔將不會有NULL值。

你會關閉更好,如果您將它們保存爲3列,並創建一個視圖或計算列,如果你真的希望他們作爲一個單一的領域。通過嘗試將值存儲在一起,您正在着手設計一個常見的不良設計問題。

看看這裏的fun splitting strings in SQL Server!

另外,不要把空間中列名,除非[你喜歡]有[括號]所有[在]的地方。

+0

有沒有可能這樣的商店嗎? – user 2012-04-18 13:02:32

+1

@user當然;只需用三個新列替換ZipInfo列:City,State和Zip。有一本很好的書,描述了我推薦的很多SQL反模式和解決方案:http://pragprog.com/book/bksqla/sql-antipatterns – GolfWolf 2012-04-18 13:04:28

+0

@ w0lf可能將三個值存儲到單個列中嗎? – user 2012-04-18 13:06:22

1

我同意@KM。您不應該將這些數據存儲在同一個字段中。如果您將Zip Info數據存儲在同一字段中,那麼您將在搜索數據時遇到重大問題,因此您應該使用而不是這樣做。

但是如果你必須那麼你將有類似於這樣的插入:

INSERT INTO yourTable 
(
    BranchName 
    , BranchManagerName 
    , Address 
    ,[Zip Info] 
    ,PhoneNo 
    , FaxNo 
    , Email 
    ,Status 
    , CreatedOn 
) 
SELECT BranchName 
    , BranchManagerName 
    , Address 
    ,State + ', ' + City + '-' + Zip 
    ,PhoneNo 
    , FaxNo 
    , Email 
    ,Status 
    , CreatedOn 
0

兄弟,如果你想在格式 狀態,爲現場zip_info城市郵編 和價值增值國家,城市及郵遞如下 XXX,YYYY,123 你只需把所有三個值在下面的格式上Zip_Info的地方在INSERT語句

「XXX,YYYY-123」