【发布时间】:2016-11-17 14:02:13
【问题描述】:
我有一张表,我愿意用函数使用其他列值生成的值填充两列。
注意:我在 Visual Studio 中使用 .mdf 文件,而不是 SQL Server。
如果 EmployeeName 是“XYZ”,那么密码将是“XYZ@123”,邮件 ID 将是“XYZ@gmail.com”
流程如下
CREATE FUNCTION [dbo].[fnTempSetAllEmployeeMailIdAndEmployeePassword]()
RETURNS @OutputTable TABLE
(
EmployeeName NVARCHAR(250),
TempEmployeeMailId NVARCHAR(250),
TempEmployeePassword NVARCHAR(250)
)
AS
BEGIN
DECLARE @Initialiser INT = 1, @NumberOfRowsInTable INT, @TempEmployeeId INT, @TempEmployeeName NVARCHAR(250);
SELECT @NumberOfRowsInTable = COUNT(*)
FROM tbEmployee;
WHILE(@Initialiser <= @NumberOfRowsInTable)
BEGIN
SELECT
@TempEmployeeName = [EmployeeName],
@TempEmployeeId = [EmployeeId]
FROM
(SELECT
ROW_NUMBER() OVER(ORDER BY [EmployeeId] ASC) AS ROwNumber,
[EmployeeId], [EmployeeName]
FROM
tbEmployee) AS TempTable
WHERE
RowNumber = @Initialiser;
UPDATE tbEmployee
SET [EmployeeMailId] = LOWER(@TempEmployeeName) + '@gmail.com',
[EmployeePassword] = LOWER(@TempEmployeeName) + '@123'
WHERE [EmployeeId] = @TempEmployeeId;
SET @Initialiser = @Initialiser + 1;
END
INSERT @OutputTable
SELECT [EmployeeName], [EmployeeMailId], [EmployeePassword]
FROM tbEmployee;
RETURN
END
问题是当我在新的查询文件中执行时,上述语句有效。
但是当我投入功能并尝试更新它时。我不会保存并说执行时出错了。
但是当我评论 UPDATE 命令时保存。
Update 在 while 循环中是否有问题?
【问题讨论】:
标签: sql sql-server function stored-procedures mdf