我想将e_Mail
中的所有@tablename
列替换为我的用户表(我的主表)。
例如:
@tablename
[name] [eMail] // columns
------------------------------------------------------
name surname blahblah@gmail.com
我的users
表
[name] [eMail]
----------------------------------------
name surname blahblah@hotmail.com
我想将此行的电子邮件列更新为' blahblah@hotmail.com'在@tablename。
程序会做什么?
1-从@tablename
获取eMail列的第一个值2-拆分值(拆分字符:@)并获取第一个值(例如,如果值为blahblah@gmail.com,则获取gmail.com)
3-在用户表中搜索第一个值
4-当用户表中的查找值时,(代码必须找到blahblah@hotmail.com)在@tablename中将电子邮件更新为blahblah@hotmail.com
5-从@tablename
获取电子邮件列的第二个值
所以,我写了一个存储过程。但是这个程序不起作用。问题在哪里?
Create Proc update_eMail
(@tablename nvarchar(50),
@columnname nvarchar(50))
AS
Begin
Declare @get_oldeMail nvarchar(100)
Declare @get_eMail nvarchar(100)
Declare @get_SplitValue nvarchar(100)
Declare @get_oldSplitValue nvarchar(100)
Declare @rowNumber int
Declare @users_rowNumber int
Declare @i int
Declare @j int
Declare @q_getRowNumber NVARCHAR(MAX)
Declare @q_getoldeMail NVARCHAR(MAX)
Declare @q_UpdateQuery NVARCHAR(MAX)
SET @q_getRowNumber = N'SELECT Count(ID)
FROM ' + QUOTENAME(@tablename)
EXECUTE @rowNumber = sp_executesql @q_getRowNumber
/*Set @rowNumber = (Select Count(ID) from @tablename)*/
Set @users_rowNumber = (Select Count(ID) from tblusers)
Set @i = 1
Set @j = 1
While(@i <= @rowNumber)
BEGIN
Set @q_getoldeMail = '(SELECT Lower(@columnname) FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY ID) AS rownumber
,ID
,[Name]
,[Description]
,[Status]
,[AssignedTo]
,[AssignedToMail]
,[CC]
FROM' + @tablename + '
) AS ar
WHERE rownumber = @i)'
EXECUTE @get_oldeMail = sp_executesql @q_getoldeMail
Set @get_oldeMail = REPLACE(@get_oldeMail,'ı','i')
WHILE LEN(@get_oldeMail) > 0
BEGIN
IF CHARINDEX('@',@get_oldeMail) > 0
SET @get_oldSplitValue = SUBSTRING(@get_oldeMail,0,CHARINDEX('@',@get_oldeMail))
ELSE
BEGIN
SET @get_oldSplitValue = @get_oldeMail
SET @get_oldeMail = ''
END
SET @get_oldeMail = REPLACE(@get_oldeMail,@get_oldSplitValue + '@' , '')
END
While(@j <= @users_rowNumber)
BEGIN
Set @get_eMail = (SELECT Replace(Lower(eMail),'ı','i') FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY ID) AS rownumber
,eMail
FROM tblusers) AS ar
WHERE rownumber = @j)
WHILE LEN(@get_eMail) > 0
BEGIN
IF CHARINDEX('@',@get_eMail) > 0
SET @get_SplitValue = SUBSTRING(@get_eMail,0,CHARINDEX('@',@get_eMail))
ELSE
BEGIN
SET @get_SplitValue = @get_eMail
SET @get_eMail = ''
END
SET @get_eMail = REPLACE(@get_eMail,@get_SplitValue + '@' , '')
END
if(@get_splitValue = @get_oldSplitValue)
begin
Set @q_UpdateQuery = 'Update ar Set ' + @columnname + ' = ' + @get_email + ' Where rownumber = ' +@i
EXECUTE sp_executesql @q_UpdateQuery
break
end
SET @j = @j+1
END
SET @i = @i+1
END
End
提前致谢。