我最近将访问数据库数据导入客户SQL Server数据库。其中一个名为'Cases'的表格;我将'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
答案 0 :(得分:2)
安全选项是再次运行迁移程序。
这可以避免人们有多个姓氏或多个名字或两者兼而有之的问题。
更好的解决方案是为姓氏和名字分别设置列。
答案 1 :(得分: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
答案 2 :(得分: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
正如其他人提到的,如果他们有多个名字等,那就不行了。此外,将它们存储在前进的单独字段中以使其更容易