0

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

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

例子:

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

我的 SP 看起来像:

select DocName, MyStrFunc(DocName) as NewName
FROM Names 

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

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

4

3 回答 3

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
于 2013-03-06T19:08:50.097 回答
3

您需要的是一个标量值函数。要创建其中之一,请转到 SSMS 中的对象资源管理器,打开数据库,打开 Programmability 文件夹,然后打开 Functions 文件夹。鼠标右键单击标量值函数文件夹,然后单击“新建标量值函数”。

这将为您提供创建函数所需的外壳。然后你应该能够从任何地方调用该函数。

您的标量值函数需要将 varchar 或 nvarchar 作为输入——而不是列名。

于 2013-03-06T19:03:44.167 回答
0

SQL 中不能有动态列名。

实现这一点的唯一方法是使用动态 SQL,这有其自身的危险(SQL 注入是其中最重要的)。

于 2013-03-06T19:01:23.043 回答