「カタログ」という名前のAzure DataLakeでテーブルを作成しました。 この表には、Idとして「CatalogCode」列が含まれています。 カタログコードを渡してカタログを取得するストアドプロシージャを作成したいとします。配列をUSQLストアドプロシージャに渡す方法
私はこのようなSQL.ARRAYを使用して、それを書いた:
CREATE SCHEMA IF NOT EXISTS Export;
DROP PROCEDURE IF EXISTS Export.PrepareContent;
CREATE PROCEDURE IF NOT EXISTS Export.PrepareContent(@CatalogCodes string)
AS
BEGIN;
@CatalogCodesOneString = SELECT * FROM (VALUES(@CatalogCodes)) AS t(CodesString);
@CatalogCodesTable =
SELECT new SQL.ARRAY<string>(CodesString.Split(',')) AS Codes FROM @CatalogCodesOneString;
@CatalogCodesExploded =
SELECT Code.Trim() AS Code
FROM @CatalogCodesTable
CROSS APPLY
EXPLODE(Codes) AS r(Code);
OUTPUT @CatalogCodesExploded
TO "/outputs/explosion.tsv"
USING Outputters.Tsv();
END;
それは唯一私が他のテーブルと結合するためにそれを使用するつもりだ、ソリューションをテストしています。 それはうまく動作しますが、私は他の解決策があることを知りたいですか? TSQLでは、私は一時テーブルを使用します。 DataLakeとUSQLで何を使うべきですか?
ところで、私はテーブルに@CatalogCodesを渡す必要があります
new SQL.ARRAY<string>(@CatalogCodes.Split(','))
を書いたことはできません。次に、SQL.ARRAYを使用できます
こんにちはwBobは、あなたの答えをありがとう!あなたのソリューションは素晴らしいです、私はパラメータとしてSQL.ARRAYを渡すことについても考えていませんでした。 1つの問題があります。ストアドプロシージャにもう1つのパラメータを追加しようとすると、その後にエラーが発生します。 dbo.testProc(@codes SQL.ARRAY、@秒ストリング)およびdbo.testProc(新しいSQL.ARRAY {"a"、 "c"}、 "test")を作成します。 [エラーのある画像](http://i.imgur.com/iFYEso2.png)何が間違っていますか? –
現時点では、あなたは他の方法で試してみましたか? – wBob
abarbolin:これは最終的に修正するためにバックログに記載されている既知の問題です。現在の回避策は、最初の引数の式の周りに余分な括弧を追加することです。 回避策は、最初のパラメータの周りに余分な括弧を入れます。 'dbo.testProc((新しいSQL.ARRAY {" a "、" c "})、" test ");' –