1

最近、Access データベースのデータを顧客の SQL Server データベースにインポートしました。「ケース」と呼ばれるテーブルの 1 つ。「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

バリアント #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 に答える
2

安全なオプションは、移行プログラムを再度実行することです。

これにより、複数の姓、複数の名、またはその両方を持つ人々の問題が回避されます。

より良い解決策は、姓と名の列を別々にすることです。

于 2013-09-25T08:56:45.627 に答える
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 に答える