以倍数行更新

时间:2016-04-19 03:40:19

标签: sql-server

如果我有子查询,怎么能写UPDATE

看看:

UPDATE People 
SET Name = dbo.formatt_name((SELECT Name 
                             FROM People 
                             WHERE idInstitute = 12)) 
WHERE idInstitute = 12

我创建了一个函数formatt_name(str),它返回一个格式化的字符串。

我想使用该功能更新我桌子上的所有名字,有人知道我怎么能得到这个?

我收到此错误消息:

  

Msg 512,Level 16,State 1。

我知道,只有一个结果可以设置更新。但是,我不知道如何解决这个问题。

3 个答案:

答案 0 :(得分:1)

为什么使用子查询?您应该能够像这样更新行:

UPDATE People
SET Name = dbo.formatt_name(Name) 
WHERE idInstitute = 12

答案 1 :(得分:1)

根据您的意见,您必须更新人们所属的机构所在的表的所有记录= 12并添加另一个条件名称也不为空。

UPDATE People SET Name = dbo.formatt_name(Name)  where  
idInstitute=12 and Name IS NOT NULL 

已编辑:

根据我的理解,您必须格式化每条记录中的所有名称。

 idinstitute  Name 

  12       Antony | Jhon | Cris | Peter

  12       kEvin| JhOn | antony | PCrIS

这里你不需要子查询。找到格式化字符串的示例函数。

CREATE FUNCTION [dbo].[formatt_name] (@InputString VARCHAR(max) )
RETURNS VARCHAR(max)
AS
BEGIN
DECLARE @Index INT
DECLARE @Char CHAR(1)
DECLARE @OutputString VARCHAR(255)
SET @OutputString = LOWER(@InputString)
SET @Index = 2
SET @OutputString =
STUFF(@OutputString, 1, 1,UPPER(SUBSTRING(@InputString,1,1)))
WHILE @Index <= LEN(@InputString)
BEGIN
SET @Char = SUBSTRING(@InputString, @Index, 1)
IF @Char IN (' ', ';', ':', '!', '?', ',', '.', '_', '-', '/', '&','''','(')
IF @Index + 1 <= LEN(@InputString)
BEGIN
IF @Char != ''''
OR
UPPER(SUBSTRING(@InputString, @Index + 1, 1)) != 'S'
SET @OutputString =
STUFF(@OutputString, @Index + 1, 1,UPPER(SUBSTRING(@InputString, @Index + 1, 1)))
END
SET @Index = @Index + 1
END
RETURN ISNULL(@OutputString,'')
END

并查询更新,

 UPDATE People SET Name = dbo.formatt_name(Name)  where  
    idInstitute=12 and Name IS NOT NULL 

enter image description here

答案 2 :(得分:0)

返回一行

istream inputStream;
int myArray[3][5];
for(int i = 0; i < 3; i++)
    for(int j = 0; j < 5; j++)
        istream >> myArray[i][j];