使用SQL Server中的函数来执行字符串操作

时间:2013-03-06 18:59:22

标签: sql sql-server tsql

我们有许多存储过程需要对表中的列执行字符串操作。

我可以创建一个函数来进行字符串操作并从SP调用它吗?如果是的话,我该怎么做?

示例:

我有一个名为'Names'的表,它有一个名为'DocName'的列

我的SP看起来像:

select DocName, MyStrFunc(DocName) as NewName
FROM Names 

MyStrFunc会调整传递的值并返回一个字符串。

我们将有许多SP需要使用MyStrFunc并且不想复制字符串操作代码。

3 个答案:

答案 0 :(得分:4)

以下是user-defined function

的示例
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是其中最重要的)。