如果我有子查询,怎么能写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。
我知道,只有一个结果可以设置更新。但是,我不知道如何解决这个问题。
答案 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
答案 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];