タグ付けされた質問 「stored-procedures」

リレーショナルデータベースシステムにアクセスするアプリケーションが使用できるサブルーチン。


11
プロシージャは提供されなかったパラメータを期待しています
SQL Serverのストアドプロシージャにアクセスするとエラーが発生する Server Error in '/' Application. Procedure or function 'ColumnSeek' expects parameter '@template', which was not supplied. これは、パラメーターを指定しても、.netのsqlへのデータ接続を介してパラメーターを指定してストアドプロシージャを呼び出すと発生(System.data.SqlClient)します。これが私のコードです。 SqlConnection sqlConn = new SqlConnection(connPath); sqlConn.Open(); //METADATA RETRIEVAL string sqlCommString = "QCApp.dbo.ColumnSeek"; SqlCommand metaDataComm = new SqlCommand(sqlCommString, sqlConn); metaDataComm.CommandType = CommandType.StoredProcedure; SqlParameter sp = metaDataComm.Parameters.Add("@template",SqlDbType.VarChar,50); sp.Value = Template; SqlDataReader metadr = …


6
デフォルトのパラメーター値としてのSQL関数?
これでデフォルトのパラメーター値を変更してみました: ALTER PROCEDURE [dbo].[my_sp] @currentDate datetime = GETDATE() そしてSQLプリコンパイラが私に与えたすべてはこのエラーでした: メッセージ102、レベル15、状態1、プロシージャmy_sp、行8 '('付近の構文が正しくありません。 手順はすでに作成済みです。(それが関連するかどうかはわかりません。)私はnullのデフォルト値を使用し、後でそれをチェックしていましたが、それは適切ではないようです。これを1行で行うことはできますか? 更新:私は、MSDNのストアドプロシージャのパラメーターの説明から離れていました。 [= default]パラメーターのデフォルト値です。デフォルト値が定義されている場合、そのパラメーターの値を指定せずに関数を実行できます。 注: varchar(max)およびvarbinary(max)データ型を除くCLR関数には、デフォルトのパラメーター値を指定できます。 関数のパラメーターにデフォルト値がある場合、関数を呼び出してデフォルト値を取得するときにキーワードDEFAULTを指定する必要があります。この動作は、パラメータを省略するとデフォルト値も含まれるストアドプロシージャで、デフォルト値を持つパラメータを使用する場合とは異なります。 私はこれを間違って読んでいますか? どうもありがとう。

9
SQL Serverに更新ストアドプロシージャを挿入する
レコードが存在する場合に更新を実行するストアドプロシージャを記述しました。それ以外の場合は挿入を実行します。次のようになります。 update myTable set Col1=@col1, Col2=@col2 where ID=@ID if @@rowcount = 0 insert into myTable (Col1, Col2) values (@col1, @col2) この方法でそれを書く私の背後にあるロジックは、更新がwhere句を使用して暗黙的な選択を実行し、それが0を返す場合、挿入が行われるということです。 この方法で行う代わりに、選択を行い、返された行数に基づいて更新または挿入を行う方法があります。これは、更新を行うと2つの選択(最初の明示的な選択呼び出しと更新の場所での2番目の暗黙的な呼び出し)が発生するため、非効率的であると考えました。プロシージャが挿入を行う場合、効率に違いはありません。 私の論理はここにありますか?これは、ストアドプロシージャへの挿入と更新を組み合わせる方法ですか?

17
intを先行ゼロ付きのcharに変換する方法は?
intデータフィールドを先行ゼロ付きのnvarcharに変換する必要があります 例: 1 '001'に変換 867は '000867'などに変換します。 どうも。 これは4時間後の私の応答です... 私はこのT-SQLスクリプトをテストし、うまくいきました! DECLARE @number1 INT, @number2 INT SET @number1 = 1 SET @number2 = 867 SELECT RIGHT('000' + CAST(@number1 AS NCHAR(3)), 3 ) AS NUMBER_CONVERTED SELECT RIGHT('000000' + CAST(@number2 AS NCHAR(6)), 6 ) AS NUMBER_CONVERTED このユーザー関数を作成しました T-SQLコード: CREATE FUNCTION CIntToChar(@intVal BIGINT, @intLen Int) …

3
.NETでのストアドプロシージャ印刷出力のキャプチャ
.NETのT-SQLストアドプロシージャから印刷出力をキャプチャすることは可能ですか? errorMessagingの手段として印刷を使用する多くのレガシープロシージャがあります。例、次のPROCからアウトプリントの「単語」にアクセスすることは可能ですか? -- The PROC CREATE PROC usp_PrintWord AS PRINT 'word' // Some C# Code to would like to pull out 'word' SqlCommand cmd = new SqlCommand("usp_printWord", TheConnection); cmd.CommandType = CommandType.StoredProcedure; // string ProcPrint = ???

6
ストアドプロシージャがWebから呼び出されると遅くなり、Management Studioから速くなる
Webアプリケーションから呼び出されるたびにめちゃくちゃにタイムアウトするストアドプロシージャを使用しています。 Sqlプロファイラーを起動して、タイムアウトした呼び出しをトレースし、最終的に次のことを見つけました。 同じ引数を使用して、MS SQL Management Studio内からステートメントを実行すると(実際、プロシージャコールをSQLプロファイルトレースからコピーして実行しました)、平均5〜6秒で終了します。 しかし、Webアプリケーションから呼び出された場合、30秒以上(トレース)かかるため、私のWebページは実際にはそれまでにタイムアウトになります。 私のWebアプリケーションに独自のユーザーがいるという事実は別として、すべてが同じです(同じデータベース、接続、サーバーなど)また、Webアプリケーションのユーザーを使用してスタジオで直接クエリを実行してみましたが、6を超えることはありません秒。 何が起こっているのかを知るにはどうすればよいですか? トレースが遅延が実際の手順にあることを明確に示しているため、BLL> DALレイヤーまたはテーブルアダプターを使用しているという事実とは何の関係もないと想定しています。それは私が考えることができるすべてです。 編集私はこのリンクでADO.NET ARITHABORTがtrueに設定していることを発見しました-ほとんどの場合これは良いですが、これは時々起こります、そして推奨される回避with recompile策はストアドプロシージャにオプションを追加することです。私の場合、動作していませんが、これに非常に似ていると思います。誰もがADO.NETが他に何をしているのか、または仕様をどこで見つけられるのか知っていますか?

6
Oracleによるページング
私はOracleに精通していません。25万件のレコードがあり、ページごとに100件表示したいと考えています。現在、データアダプターとデータセットを使用して、25万レコードすべてをデータセットに取得する1つのストアドプロシージャと、ストアドプロシージャの結果のdataadapter.Fill(dataset)メソッドがあります。パラメータとして渡すことができる整数値として「ページ番号」と「ページごとのレコード数」がある場合、その特定のセクションだけを取得するための最良の方法は何ですか。たとえば、selectステートメントからページ番号として10を渡し、ページ数として120を渡すと、1880番目から1200番目までのようになり、私の頭の中の数学はうまくいかないかもしれません。 私はこれをC#を使用して.NETで行っていますが、それは重要ではないと思いました。SQL側で正しく取得できれば、クールなはずです。 更新:私はブライアンの提案を使用することができました、そしてそれは素晴らしい働きをしています。いくつかの最適化に取り組みたいのですが、ページは1分ではなく4〜5秒で表示され、ページングコントロールは新しいストアドプロシージャと非常にうまく統合できました。

4
T-SQLはストアドプロシージャのSELECTed値を取得します
T-SQLでは、これは許可されています。 DECLARE @SelectedValue int SELECT @SelectedValue = MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1 そのため、SELECTの値を取得して変数に格納することができます(明らかにスカラーの場合)。 ストアドプロシージャに同じ選択ロジックを配置した場合: CREATE PROCEDURE GetMyInt AS SELECT MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1 このストアドプロシージャの出力を取得して変数に格納できますか? 何かのようなもの: DECLARE @SelectedValue int SELECT @SelectedValue = EXEC GetMyInt (私はそれを試したので、上記の構文は許可されていません!)

6
Oracleストアドプロシージャの「AS」と「IS」の違いは何ですか?
Oracleプロシージャが "AS"で記述されていることもあれば、 "IS"キーワードで記述されていることもあります。 CREATE OR REPLACE Procedure TESTUSER.KILLINSTANCE (INSTANCEID integer) **AS** ... 対 CREATE OR REPLACE Procedure TESTUSER.KILLINSTANCE (INSTANCEID integer) **IS** ... 2つの間に違いはありますか? 編集:明らかに、2つの間に機能的な違いはありませんが、一部の人々は、SPがパッケージの一部である場合は「AS」を使用し、そうでない場合は「IS」を使用するという慣例に従っています。またはその逆です。ええ。


18
JavaおよびJPAからストアード・プロシージャーを呼び出す方法
ストアドプロシージャを呼び出してデータを取得する簡単なWebアプリケーションを作成しています。その非常にシンプルなアプリケーションは、クライアントのデータベースと対話します。従業員IDと会社IDを渡すと、ストアドプロシージャが従業員の詳細を返します。 Webアプリケーションはデータを更新/削除できず、SQL Serverを使用しています。 WebアプリケーションをJboss ASにデプロイしています。JPAを使用してストアドプロシージャまたはにアクセスする必要がありますかCallableStatement。この場合にJPAを使用する利点。 また、このストアドプロシージャを呼び出すためのSQLステートメントは何ですか。これまでにストアドプロシージャを使用したことがなく、これに苦労しています。グーグルはあまり役に立たなかった。 これがストアドプロシージャです。 CREATE procedure getEmployeeDetails (@employeeId int, @companyId int) as begin select firstName, lastName, gender, address from employee et where et.employeeId = @employeeId and et.companyId = @companyId end 更新: JPAを使用してストアドプロシージャを呼び出すときに問題が発生している他のユーザー向け。 Query query = em.createNativeQuery("{call getEmployeeDetails(?,?)}", EmployeeDetails.class) .setParameter(1, employeeId) .setParameter(2, companyId); List<EmployeeDetails> result = query.getResultList(); 私が気付いたこと: …

5
ストアドプロシージャで新しいGuidを生成する方法は?
現在、テーブルに新しい行を挿入するストアドプロシージャがあります。 insert into cars (id, Make, Model) values('A new Guid', "Ford", "Mustang") したがって、主キー「id」はGuidです。C#コードで新しいGuidを作成する方法は知っていますが、ストアドプロシージャ内で、主キー値の新しいGuidを生成する方法がわかりません。

7
SQL Serverでは、「SETANSI_NULLSON」とはどういう意味ですか?
定義は言う: SET ANSI_NULLSがONの場合、WHERE column_name = NULLを使用するSELECTステートメントは、column_nameにNULL値がある場合でも、ゼロ行を返します。WHERE column_name <> NULLを使用するSELECTステートメントは、column_nameにNULL以外の値がある場合でも、ゼロ行を返します。 これは、このクエリにnullが含まれないことを意味しますか? SELECT Region FROM employees WHERE Region = @region またはANSI_NULL、このようなクエリ(にWHERE特定の単語が含まれている場合NULL)のみが関係しますか? SELECT Region FROM employees WHERE Region = NULL

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.