我正在尝试创建从表中获取数据,替换某些字符并返回替换数据的函数。函数将在调用时执行。
CREATE FUNCTION convert_lat(@rawtxt NVARCHAR)
RETURNS NVARCHAR(50)
AS
BEGIN
DECLARE @raw_mon NVARCHAR(50);
SELECT @raw_mon = REPLACE (r.mongol, N'ф', 'f')
FROM Connection.dbo.raw r
WHERE r.mongol = @rawtxt
RETURN @raw_mon;
END;
GO
UPDATE [Connection].[dbo].[raw]
SET [mongol] = dbo.convert_lat(mongol)
WHERE [mongol] LIKE N'ф%';
执行UPDATE
语句后,应该替换的字符不会被替换,但整行变为 null。
如评论中所述,使用 ITVF 函数
CREATE FUNCTION convert_lat(@rawtxt nvarchar (400))
RETURNS TABLE AS RETURN
SELECT raw_mon = REPLACE (@rawtxt, N'ф', 'f')
GO
使用它:
SELECT R.* , F.raw_mon
FROM Connection.dbo.raw r
CROSS APPLY convert_lat (R.mongol) F
我建议定义适当长度的函数参数
所以
CREATE FUNCTION convert_lat(@rawtxt nvarchar) -- Will accept 1 length default
而是
CREATE FUNCTION convert_lat(@rawtxt nvarchar(255))