Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL SERVER-根据现有列为列分配新值_Sql Server - Fatal编程技术网

Sql server SQL SERVER-根据现有列为列分配新值

Sql server SQL SERVER-根据现有列为列分配新值,sql-server,Sql Server,在我的SQL Server 2012数据库中,我有一个包含两列的表,但它们的值太长,算法无法处理 这两列的值是另一个表中相互连接的ID,如 A | B, B | C, D | A 我想在同一个表上创建另外两个值较短的列。我该怎么做 基本上,我想翻译如下内容 1234567890 | 0987654321, 0987654321 | 5432167890 进入 对于每一行。您可能必须使用游标操作来执行此操作,以确保每一行的新主键和外键相同。您可以使用游标对象来转换数据 请看一看您可以使用CTE将

在我的SQL Server 2012数据库中,我有一个包含两列的表,但它们的值太长,算法无法处理

这两列的值是另一个表中相互连接的ID,如

A | B, B | C, D | A 我想在同一个表上创建另外两个值较短的列。我该怎么做

基本上,我想翻译如下内容

1234567890 | 0987654321, 0987654321 | 5432167890 进入


对于每一行。

您可能必须使用游标操作来执行此操作,以确保每一行的新主键和外键相同。

您可以使用游标对象来转换数据


请看一看

您可以使用CTE将其拆分为一个表

Declare @t table(ID INT IDENTITY , data varchar(max)) Insert into @t Select '1234567890' ;with cte as ( select ID, substring(data, 1, 1) as Chars, stuff(data, 1, 1, '') as data, 1 as RowID from @t union all select ID, substring(data, 1, 1) as Chars, stuff(data, 1, 1, '') as data, RowID + 1 as RowID from cte where len(data) > 0 ) select Chars from cte order by ID, RowID
然后,您需要在另一列中创建一个表达式,将当前行中的当前值相加或递增。

您好,谢谢您的回答。我读过,但我真的不明白如何使用光标。请你解释一下好吗?谢谢你的回答。你能再解释一下吗?当我翻译一行时,光标会知道其中一列之前是否已经翻译过,并给它相同的ID吗? Declare @t table(ID INT IDENTITY , data varchar(max)) Insert into @t Select '1234567890' ;with cte as ( select ID, substring(data, 1, 1) as Chars, stuff(data, 1, 1, '') as data, 1 as RowID from @t union all select ID, substring(data, 1, 1) as Chars, stuff(data, 1, 1, '') as data, RowID + 1 as RowID from cte where len(data) > 0 ) select Chars from cte order by ID, RowID