我们有许多存储过程需要对表中的列执行字符串操作。
我可以创建一个函数来进行字符串操作并从 SP 调用它吗?如果是,我会怎么做?
例子:
我有一个名为“Names”的表,它有一列名为“DocName”
我的 SP 看起来像:
select DocName, MyStrFunc(DocName) as NewName
FROM Names
MyStrFunc 将调整传递的值并返回一个字符串。
我们将有许多 SP 需要使用 MyStrFunc 并且不想复制字符串操作代码。
我们有许多存储过程需要对表中的列执行字符串操作。
我可以创建一个函数来进行字符串操作并从 SP 调用它吗?如果是,我会怎么做?
例子:
我有一个名为“Names”的表,它有一列名为“DocName”
我的 SP 看起来像:
select DocName, MyStrFunc(DocName) as NewName
FROM Names
MyStrFunc 将调整传递的值并返回一个字符串。
我们将有许多 SP 需要使用 MyStrFunc 并且不想复制字符串操作代码。
这是一个带有用户定义函数的示例
CREATE FUNCTION dbo.StringConverter
(
@oldValue varchar(100)
)
RETURNS varchar(100)
AS
BEGIN
DECLARE @Result varchar(100)
-- do your custom manipulation here. this is just an example
SELECT @Result = upper(@oldValue)
RETURN @Result
END
GO
-- and to use it
SELECT x.a as src, dbo.StringConverter(x.a) as converted
FROM (
SELECT 'asdf' as a
) as x
-- results
src converted
asdf ASDF
您需要的是一个标量值函数。要创建其中之一,请转到 SSMS 中的对象资源管理器,打开数据库,打开 Programmability 文件夹,然后打开 Functions 文件夹。鼠标右键单击标量值函数文件夹,然后单击“新建标量值函数”。
这将为您提供创建函数所需的外壳。然后你应该能够从任何地方调用该函数。
您的标量值函数需要将 varchar 或 nvarchar 作为输入——而不是列名。