「(このコードはストアド プロシージャ自体で実行されます)」と述べています。したがって、プロシージャを作成するときにパラメータを宣言する必要があるため、プロシージャにいると仮定すると、パラメータ名はすでにわかっています。選択して名前をテキストフィールドに入れるだけです
ALTER PROCEDURE procname
(
@param1 NVARCHAR(255)
,@param2 INT
...
)
SELECT [Parameters] = '@param1=' + @param1
+ ',@param2=' + CONVERT(NVARCHAR(MAX),@param2)...
これCONVERT
は、char 以外のデータ型の例です。
アップデート
この関数を使用するには、それ自体を指すリンク サーバーを作成する必要がありますOPENQUERY
。
USE [master]
GO
/****** Object: LinkedServer [.] Script Date: 04/03/2013 16:22:13 ******/
EXEC master.dbo.sp_addlinkedserver @server = N'.', @srvproduct=N'', @provider=N'SQLNCLI', @datasrc=N'.', @provstr=N'Integrated Security=SSPI'
/* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'.',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
GO
これで、次のカーソルのような操作を実行して各パラメーター名を取得し、動的 SQL を使用しOPENQUERY
て値を取得できます。
DECLARE curParms CURSOR FOR
SELECT
name
FROM sys.parameters
WHERE OBJECT_ID = OBJECT_ID('schema.procedurename')
ORDER BY parameter_id
OPEN curParms
FETCH curParms INTO @parmName
WHILE @@FETCH_STATUS <> -1
BEGIN
SELECT @parmName + '=' + (SELECT * FROM OPENQUERY('linkedservername','SELECT ' + @parmName))
FETCH curParms INTO @parmName
END
CLOSE curParms
DEALLOCATE curParms