0

そして、ここにいるすべての専門家に..私はストアドプロシージャの初心者です。

私は本当に助けが必要です、私の問題は、パラメータをデータベース名として使用することは可能ですか?

以下は私のサンプルです:

ALTER PROCEDURE [dbo].[SP_EventLogs]
    (@HRTable as varchar(50))
AS
BEGIN
    Set NOCOUNT ON

    SELECT
        a.*,LOG_ADDBY.ADDBY 
    FROM
        EVENT_VIEWER a
    INNER JOIN 
        (SELECT 
             PK, (Lastname + ', ' + Firstname + ' ' + ExtName) as ADDBY 
         FROM 
             @HRTable.[dbo].[EMP_RECORDS]) LOG_ADDBY ON a.PerformBy = LOG_ADDBY.PK
    ORDER BY
        a.PerformDate DESC

    Set NOCOUNT OFF
END

@HRTable私のパラメータです..そしてそれはエラーを返します。

どんな提案でも大歓迎です。

ありがとうございました...

4

2 に答える 2

1

1 つの代替方法は、テーブル名を含むビューを作成し、それに結合することです。

SELECT 't1'as tableName ,col1, col2, col3,... from t1
UNION ALL 
SELECT 't2',col1, col2, col3,...  from t2
where
.....
and tableName=@HRTable

しかし、これは実際には「完了したこと」ではありません。これを行う必要がある場合は、動的 SQL と Exec を使用することもできますが、自分が行っていることを正しい方法で行っているかどうかを検討してください。

さまざまな表の中に、1 つにまとめることができないものは何ですか?

于 2013-09-28T15:33:18.833 に答える
0

私が理解したように、@HRTable はデータベース名です。これは機能しません。動的クエリを使用する必要があります。クエリ テキストの変数を宣言し、それをクエリに設定してから、Exec(@variable) を使用してクエリ テキストを変数で実行します。

于 2013-09-29T05:23:32.877 に答える