0

テーブル内の列で文字列操作を実行する必要があるストアド プロシージャが多数あります。

文字列操作を行う関数を作成し、SP から呼び出すことはできますか? はいの場合、どうすればよいですか?

例:

「Names」という名前のテーブルがあり、「DocName」という名前の列が 1 つあります。

私のSPは次のよ​​うになります。

select DocName, MyStrFunc(DocName) as NewName
FROM Names 

MyStrFunc は渡された値を調整し、文字列を返します。

MyStrFunc を使用する必要があり、文字列操作コードを複製したくない多くの SP があります。

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 フォルダーを開きます。Scalar-Valued Functions フォルダーを右クリックし、[新しいスカラー値関数] をクリックします。

これにより、関数を作成するために必要なもののシェルが得られます。次に、その関数をどこからでも呼び出すことができるはずです。

スカラー値関数は、列名ではなく、入力として varchar または nvarchar を取る必要があります。

于 2013-03-06T19:03:44.167 に答える
0

SQL では動的列名を使用できません。

これを実現する唯一の方法は、動的 SQLを使用することですが、これには危険が伴います ( SQL インジェクションがその最たるものです)。

于 2013-03-06T19:01:23.043 に答える