2

column を持つテーブルがありますemail。これらすべてのメールを文字列で返す必要があります。私はこのコードを試していますが、次のようになります:

Msg 102, Level 15, State 1, Procedure getemailjcp, Line 24
Incorrect syntax near '='.
Msg 102, Level 15, State 1, Procedure getemailjcp, Line 31
Incorrect syntax near 'a'.

TSQL 関数:

ALTER function [dbo].[getemails]
(
    @DB_Name varchar(100)
)
Returns varchar(4000)
AS
BEGIN
    DECLARE @out varchar (4000);
    DECLARE @in varchar (4000);
    SET @out =
        (
            SELECT @in = @in + email +'; ' 
            FROM 
                (
                    SELECT DISTINCT ISNULL(U.nvarchar4, 'NA') as email
                    FROM
                        sometable
            ) a
        ) b
    RETURN @out
END
4

3 に答える 3

1

SO の件名についてはたくさんあります。たとえば、ここではいくつかの異なるソリューションが表示されます。

Vikdor からの正しいコメント。テーブルに電子メールの値が繰り返されていて、それらが不要で個別の値を連結するだけの場合は、ネストされたクエリを使用します。

SELECT @in = COALESCE(@in, ';', '') + b.emails +'; ' 
  FROM (
        SELECT DISTINCT ISNULL(U.nvarchar4, 'NA') as emails FROM sometable
       ) b

ここでは、この場合のSQL Fiddleコードが動作しています。

この連結についてさらに深く知りたい場合は、このテーマに関する詳細な記事をご覧ください。

Transact-SQL での行の値の連結

DISTINCT 句が不要な場合は、ネストされた select 句を使用する必要はありません。出力する変数に email 列の値を追加するだけです。

あなたの場合、このSELECT句を使用してください:

SELECT @in = COALESCE(@in + '; ', '') + ISNULL(U.nvarchar4, 'NA')
  FROM sometable

このSQL Fiddleの作業コードを確認してください。

于 2012-09-22T10:45:25.143 に答える
0

これは機能します(@DB_nameがどこで使用されているかわかりません、ところで):

ALTER function [dbo].[getemails]
(
    @DB_Name varchar(100)
)
Returns varchar(4000)
AS
BEGIN
    DECLARE @in varchar (4000);
    SELECT @in = ''
    SELECT @in = @in + email +'; ' 
    FROM 
        (
            SELECT DISTINCT ISNULL(U.nvarchar4, 'NA') as email FROM sometable
        ) b
    RETURN @in
END
于 2012-09-22T10:35:06.307 に答える
0

以下を使用してみてください

CREATE function [dbo].[getemails] 
( 
    @DB_Name nvarchar(100) 
) 
Returns nvarchar(max) 
AS 
    BEGIN 
    DECLARE @in nvarchar (max); 
    SELECT @in = ISNULL(@in, '') + b.emails +'; '  
    FROM ( 
        SELECT DISTINCT ISNULL(U.nvarchar4, 'NA') as emails FROM sometable
       ) b
    RETURN @in 
END 
于 2012-09-22T11:45:53.457 に答える