我们有许多存储过程需要对表中的列执行字符串操作。
我可以创建一个函数来进行字符串操作并从SP调用它吗?如果是的话,我该怎么做?
示例:
我有一个名为'Names'的表,它有一个名为'DocName'的列
我的SP看起来像:
select DocName, MyStrFunc(DocName) as NewName
FROM Names
MyStrFunc会调整传递的值并返回一个字符串。
我们将有许多SP需要使用MyStrFunc并且不想复制字符串操作代码。
答案 0 :(得分:4)
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
答案 1 :(得分:3)
你想要的是一个标量值函数。要创建其中一个,请转到SSMS中的对象资源管理器,打开数据库,打开Programmability文件夹,然后打开Functions文件夹。用鼠标右键单击Scalar-Valued Functions文件夹,然后单击“New Scalar-value function”。
这将为您提供创建函数所需的shell。然后你应该可以从任何地方调用该函数。
您的标量值函数需要将varchar或nvarchar作为输入 - 而不是列名。
答案 2 :(得分:0)
您不能在SQL中拥有动态列名。
实现这一目标的唯一方法是使用dynamic SQL,它有自己的危险(SQL Injection是其中最重要的)。