2016-04-08 12 views
0

SQL 2012でビューを作成する必要があります。このスクリプトはスタンドアロンとしてSSMSで実行されますが、ビューに変換する必要があります。キーデータこれまでのところ、私たちはCLRの結果を一時テーブルに入れてそこから参加してきました。ビュー内で一時テーブルは使用できないため、代わりにテーブルの変数を使用していますが、宣言部分の周りにエラーが発生しています。私たちは明らかにストアドプロシージャとして実行しようとしましたが、ビューから呼び出すことはできません...任意の提案をいただければ幸いです。SQLビューでの宣言または一時テーブルの使用をお願いします。

これは、作業コード

declare @idList IdList 
INSERT INTO @idList SELECT distinct RT_ID FROM [RT] 
DECLARE @CLRs TABLE (
RT_ID nvarchar(19) 
,rowindex nvarchar(20) 
,Exp1 nvarchar(20) 
,Exp2 nvarchar(20) ) 

INSERT INTO @CLRs 
SELECT [IDLIST].[id] as RT_ID 
,AD.ROWINDEX 
,dbo.fnPropercase(Contact) as Exp1 
,dbo.fnPropercase(Contact2) as Exp2 
from @idList [IDLIST] 
LEFT OUTER JOIN [CLR DETAILS](@idList,1) [AD] on [IDLIST].[id] = [AD].RT_ID 
INNER JOIN CONTACTS CS on CS.CONTACTS_ID= AD.RT_CONT_ID 
SELECT * FROM @CLRs 

は明らかにこれは単純化スクリプトですが、意図は

ありがとうを見ることがまだあります。

+0

ここで何かが見えます。 SQLCLR TVFは何をしていますか?本当にSQLCLRですか? '@ idList'はユーザ定義のテーブル型ですが、SQLCLRオブジェクトに渡すことはできないようです。上記のクエリは真に実用的なコードですか、またはパブリックサイトに投稿する目的で変更されていますか?つまり、オブジェクト名やフィールド名のほとんどが無意味なので、これは非常に混乱しやすいコードです。そして実際にオブジェクト名 '[CLR DETAILS]'にスペースがありますか?その場合は、スペースがない場合は作業する方がはるかに簡単なので、削除することを検討する必要があります。 –

答えて

1

CTEが答えです。

WITH 
    IdList AS (SELECT distinct RT_ID FROM [RT]), 
    CLRs AS (SELECT [IDLIST].[id] AS RT_ID 
        ,AD.ROWINDEX 
        ,dbo.fnPropercase(Contact) AS Exp1 
        ,dbo.fnPropercase(Contact2) AS Exp2 
      FROM IdList [IDLIST] 
      LEFT OUTER JOIN [CLR DETAILS](IdList,1) [AD] 
       ON [IDLIST].[id] = [AD].RT_ID 
      INNER JOIN CONTACTS CS 
       ON CS.CONTACTS_ID = AD.RT_CONT_ID) 
    SELECT * FROM CLRs 

上記のビューの定義が必要です。これは単純なケースだとお伝えしましたので、お気軽にCTEを追加してご参加ください。

ドキュメント:MDSN - CTEs

+0

あなたの時間をありがとう@freakyhat、はい、CTEのが答えている! – user3735855

+0

あなたの歓迎!答えを正しいとマークしてください:) – freakyhat

関連する問題