主にSQLを知らない人によって実行されるSQLサーバーで作成したクエリがあり、クエリを実行するたびに異なる文字列または日付を入力する必要がある2つの領域があります。今のところ、クエリの先頭に情報を入力し、変数として保存するように書きました。クエリを実行している人にデータを入力するように促すSQLを取得する方法はありますか?以下は、私が話している内容を含むコードの抜粋です。
declare
/*ENTER ACCOUNTING MONTH*/
@amon VARCHAR(2) = '05',
/*ENTER INVOICE DATE IN MM/DD/YYYY FORMAT*/
@invdate DATE = '05/31/2015'
~~
rest of the code
~~
declare @sumA numeric(25, 5), @sumB numeric(25, 5), @ratio numeric(25, 5)
select @sumA = sum(amnt) from accnt where accno = '1152'
select @sumB = sum(amnt) from acc1152
update acc1152 set amnt = amnt * (@sumA/@sumB),
amon = @amon,
invdate = @invdate,
ven = '1152',
code = '1152',
invno = 'INVENTORY'
sQLが@amonと@invdateの値を入力するようにユーザーに促すことは可能ですか?私に彼らにそうするように言っているコメント行があるだけではありませんか?
アプリケーションを実行できない場合、開発者などがいない場合、1つの方法があります。ストアドプロシージャを作成します。
create stored procedure spDoSomeJob
@amon VARCHAR(2),
@invdate DATE
as
begin
~~
rest of the code
~~
declare @sumA numeric(25, 5), @sumB numeric(25, 5), @ratio numeric(25, 5)
select @sumA = sum(amnt) from accnt where accno = '1152'
select @sumB = sum(amnt) from acc1152
update acc1152 set amnt = amnt * (@sumA/@sumB),
amon = @amon,
invdate = @invdate,
ven = '1152',
code = '1152',
invno = 'INVENTORY'
end
この手順を実行するだけの場合を除き、ユーザーのアクティビティ許可を拒否します。次のように実行します:
exec spDoSomeJob @amon = '05', @invdate = '05/31/2015'
少なくとも、ユーザーが何かをときどき破損することはないことが確実になります...そして、ストアドプロシージャのパラメーターに値を指定しない場合、それらのパラメーターの既定値がない限り、これを行うように求められます。あなたの場合の最善の回避策のように思えます。
他の人が述べたように、SQL ServerとManagement Studioはエンドユーザーツールとして意図されていません。
SQL SERVERを使用しているため、SQL Server Reporting Services(SSRS)と呼ばれるツール(インストールおよび構成されていない可能性があります)があります。
それdoesは、ユーザーにパラメーターの値を求める機能を備えています。
クエリはレポートデザイナに入り、@変数はレポートフィルタになり(かなり自動的に)、素敵なレイアウトを作成できます。
紙と印刷は関係ありません。実際、SSRSはあるレポートを別のレポートにドリルダウンし、次のクエリの開始値を渡します。
もう1つの解決策は、PowerShellを使用してユーザーに入力を要求し、PowerShellで実行されるときにそのデータをスクリプトに渡すことです。ユーザーのコンピューターに、TSQLを実行するためにいくつかのPowerShell拡張機能をインストールする必要がある場合があります。 import-module sqlpsと同様。 PowerShellは気弱な人向けではありませんが、無料なので、大きなコミットメントなしで試すことができます。
おそらく、このクエリを別のプログラミング言語から呼び出すことができますか? SQLは、説明しているタスクには効果的ではありません。 Python/Java/C#などの高レベル言語を使用すると、ユーザー入力を簡単に要求でき、間違いなくこのジョブにより適しています。
本当にSQLで何かをしたいときにSSMSを使用している場合は、SSMS templates を使用し、CTRL + SHIFT + Mを使用してユーザーにパラメーター値を入力させることができますが、このアプローチはお勧めできません。
TOADをSQL Serverに使用します。ここでは、スクリプトの一部として「ランタイム入力フィールド」を定義できます。
つまり.
select * from myTable AS m where m.ID = :MyValue
:MyValue
はパラメーターであり、TOADがSQLコマンドを実行すると、その場で値を入力するようユーザーに要求します。 SSMSがこの機能を提供していないのは残念です。