1

我最近将访问数据库数据导入客户 SQL Server 数据库。对于名为“案例”的表格之一;我将“Case_Name”列设置为“Surname Firstname”,其中“Surname”和“Firstname”是 Access 数据库中的列。现在客户希望“Case_Name”列改为“​​Firstname Surname”。所以我的问题是这可以很好地或简单地在 T-SQL 中完成,还是我需要再次重新运行我的 c# 迁移程序或创建其他一些 c# 程序

当前格式:

Cases桌子:

Id         Case_Name         Case_Description
1          Bloggs Joe        Will Management
2          York Susan        Divorce CAse

希望表格看起来像这样:

Id         Case_Name         Case_Description
1          Joe Bloggs        Will Management
2          Susan York        Divorce CAse
4

3 回答 3

2

安全的选择是再次运行您的迁移程序。

这避免了人们有多个姓氏或多个名字或两者兼有的问题。

更好的解决方案是为姓和名分别列。

于 2013-09-25T08:56:45.627 回答
2

变体 #1

DECLARE @temp TABLE
(
      ID INT IDENTITY(1,1)
    , Case_Name NVARCHAR(50)
    , Case_Description NVARCHAR(50)
)

INSERT INTO @temp (Case_Name, Case_Description)
VALUES 
    ('Bloggs Joe', 'Will Management'),
    ('York Susan', 'Divorce CAse')

UPDATE @temp
SET Case_Name = SUBSTRING(Case_Name, CHARINDEX(' ', Case_Name), LEN(Case_Name)) + ' ' + SUBSTRING(Case_Name, 1, CHARINDEX(' ', Case_Name)) 

SELECT * FROM @temp

变体 #2

DECLARE @temp TABLE
(
      ID INT IDENTITY(1,1)
    , Case_Name NVARCHAR(50)
    , Case_Description NVARCHAR(50)
)

INSERT INTO @temp (Case_Name, Case_Description)
VALUES 
    ('Bloggs Joe', 'Will Management'),
    ('York Susan', 'Divorce CAse')

CREATE TABLE dbo.temp
(
      ID INT IDENTITY(1,1) PRIMARY KEY
    , FirstName NVARCHAR(20) NOT NULL
    , LastName NVARCHAR(20) NOT NULL
    , Case_Name AS FirstName + ' ' + LastName
    , Case_Description NVARCHAR(50)
)

INSERT INTO dbo.temp (FirstName, LastName, Case_Description)
SELECT 
      SUBSTRING(Case_Name, CHARINDEX(' ', Case_Name), LEN(Case_Name)) 
    , SUBSTRING(Case_Name, 1, CHARINDEX(' ', Case_Name)) 
    , Case_Description 
FROM @temp

SELECT * FROM dbo.temp

输出

ID          FirstName            LastName             Case_Name                                 Case_Description
----------- -------------------- -------------------- ----------------------------------------- --------------------------------------------------
1            Joe                 Bloggs                Joe Bloggs                               Will Management
2            Susan               York                  Susan York                               Divorce CAse
于 2013-09-25T09:11:50.987 回答
1
SELECT SUBSTRING(casename, 1, CHARINDEX(' ', casename) - 1) AS [FirstName],
SUBSTRING(casename, CHARINDEX(' ', casename) + 1, LEN(casename)) AS [LastName]

这会将 2 分开一个空格,然后您可以根据需要将它们连接在一起。

SELECT FirstName + ' ' + LastName FROM (subquery to get the split as above) as subq

正如其他人提到的那样,如果他们有多个名字等,它就行不通了。此外,将它们存储在单独的字段中以使其更容易

于 2013-09-25T08:57:32.730 回答