0

SQL クエリを生成して実行する SQL クエリを生成しました。

このクエリをビューまたは Excel に表示して、SQL Server Management Studio を使用しないユーザーに提供したいと考えています。

Excel からストアド プロシージャを実行する方法を説明しているブログ エントリをいくつか 見つけました。

悲しいことに、それらは私にはうまくいきません。

ここで、ストアド プロシージャのクエリ/SQL:

DECLARE @template nvarchar(1000)
DECLARE @script nvarchar(max)
DECLARE @dbname nvarchar(max)
DECLARE c CURSOR FOR
select name from  master.sys.databases
WHERE name LIKE '%REPORTING'
OPEN c

SET @template = 'SELECT 
    ''CUSTOMER_PLACEHOLDER'' AS Customer
      ,rd.[ReportName]        
      ,min(ri.RenderingStart) AS FirstRequest
      ,max(ri.RenderingEnd) AS LastRequest
      ,count(ri.ReportInstanceGUID) AS TimesRendered
  FROM [DBNAME_PLACEHOLDER].[dbo].[ReportDefinition] rd
  LEFT JOIN DBNAME_PLACEHOLDER.dbo.ReportJob rj ON rj.ReportDefinitionGUID = rd.ReportDefinitionGUID
  LEFT JOIN DBNAME_PLACEHOLDER.dbo.ReportInstance ri ON ri.ReportJobGUID = rj.ReportJobGUID
  GROUP BY rd.ReportName'

SET @script = ''

FETCH NEXT FROM c INTO @dbname

DECLARE @first bit
SET @first = 1

WHILE @@FETCH_STATUS = 0
BEGIN   
    DECLARE @customer nvarchar(6)

    SET @customer = SUBSTRING(@dbname,14,6)
    IF @first = 1
        BEGIN
            SET @script = @template
            SET @first = 0
        END
    ELSE
        --SET @script = @script+'
        --UNION ALL
        --'+@template

    SET @script = REPLACE(@script,'CUSTOMER_PLACEHOLDER', @customer)
    SET @script = REPLACE(@script,'DBNAME_PLACEHOLDER', @dbname)

    FETCH NEXT FROM c 
    INTO @dbname

END
    EXEC (@script)
CLOSE c
DEALLOCATE c

そのELSE部分は、Excel でエラーを確認するためにコメントされています。

そのように実行するとクエリが実行されます。

Excelで呼び出すと、次のエラーが発生します(管理者としてExcelを起動したときに同じことが起こっていることを確認しました):

エラーピック

どこで続けたらいいのかわからない。EXEC が許可されていないため、テーブル値関数も機能しません。可能であれば、データベースの数と名前が変更される可能性があるため、動的部分を保持したいと考えています。

ヒント?

4

0 に答える 0