2012-04-18 74 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”