タグ付けされた質問 「sql-server-2000」


28
SQL Serverにテーブルが存在するかどうかを確認する
これは、SQLステートメントを使用してSQL Server 2000/2005にテーブルが存在するかどうかを確認する方法についての最終的な議論になりたいと思います。 あなたが答えをググるとき、あなたは非常に多くの異なる答えを得ます。それを行う公式/後方および前方互換性のある方法はありますか? これを行うには、2つの方法があります。2つのうちどちらが標準/最良の方法ですか? 最初の方法: IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' AND TABLE_NAME='mytablename') SELECT 1 AS res ELSE SELECT 0 AS res; 2番目の方法: IF OBJECT_ID (N'mytablename', N'U') IS NOT NULL SELECT 1 AS res ELSE SELECT 0 AS res; MySQLはシンプルな SHOW TABLES LIKE '%tablename%'; ステートメント。私は似たようなものを探しています。

11
最初の行に参加する方法
具体的で架空の例を使用します。 通常、各注文には1つの品目しかありません。 注文: OrderGUID OrderNumber ========= ============ {FFB2...} STL-7442-1 {3EC6...} MPT-9931-8A LineItems: LineItemGUID Order ID Quantity Description ============ ======== ======== ================================= {098FBE3...} 1 7 prefabulated amulite {1609B09...} 2 32 spurving bearing ただし、場合によっては、2つの広告申込情報を含む注文が発生することがあります。 LineItemID Order ID Quantity Description ========== ======== ======== ================================= {A58A1...} 6,784,329 5 pentametric fan {0E9BC...} 6,784,329 5 differential …

19
TSQL Selectの行ごとに乱数を生成するにはどうすればよいですか?
テーブルの行ごとに異なる乱数が必要です。次の一見明白なコードでは、各行に同じランダム値を使用しています。 SELECT table_name, RAND() magic_number FROM information_schema.tables これからINTまたはFLOATを取得します。ストーリーの残りの部分では、この乱数を使用して、既知の日付からランダムな日付オフセットを作成します。たとえば、開始日から1〜14日オフセットします。 これはMicrosoft SQL Server 2000用です。

18
単一引用符をエスケープし、単一引用符でユーザー入力を囲むことで、SQLインジェクションから保護できますか?
ユーザー入力を含むクエリを作成する場合、パラメーター化されたSQLクエリがユーザー入力をサニタイズするための最適な方法であることを理解していますが、ユーザー入力を取得して一重引用符をエスケープし、文字列全体を一重引用符で囲むと何が問題になるのでしょうか。これがコードです: sSanitizedInput = "'" & Replace(sInput, "'", "''") & "'" ユーザーが入力する一重引用符はすべて二重一重引用符に置き換えられます。これにより、ユーザーは文字列を終了できなくなります。そのため、セミコロンやパーセント記号など、ユーザーが入力する可能性のある他のすべてはすべて文字列の一部となり、コマンドの一部として実際には実行されません。 私たちはMicrosoft SQL Server 2000を使用しています。これは、単一引用符が唯一の文字列区切り文字であり、文字列区切り文字をエスケープする唯一の方法であると私は考えているため、ユーザーが入力するものを実行する方法はありません。 これに対してSQLインジェクション攻撃を仕掛ける方法は見当たらないが、もしこれが私のように弾丸であるとすれば、他の誰かがすでにそれを考えていて、それが一般的な慣行になるだろう。 このコードの何が問題になっていますか?このサニタイズ手法を超えてSQLインジェクション攻撃を取得する方法はありますか?この手法を利用するユーザー入力のサンプルは非常に役立ちます。 更新: このコードに対してSQLインジェクション攻撃を効果的に開始する方法はまだわかりません。一部の人々は、バックスラッシュが1つの単一引用符をエスケープし、もう1つを残して文字列を終了し、残りの文字列がSQLコマンドの一部として実行されるようにすることを提案しました。 MySQLデータベースですが、SQL Server 2000では、単一引用符をエスケープする唯一の方法(私が見つけたもの)は、別の単一引用符を使用することです。バックスラッシュはそれをしません。 また、単一引用符のエスケープを停止する方法がない限り、ユーザー入力の残りの部分はすべて1つの連続した文字列と見なされるため、実行されません。 入力をサニタイズするより良い方法があることを理解していますが、上記で提供した方法が機能しない理由を学ぶことに本当に興味があります。このサニタイズ方法に対するSQLインジェクション攻撃を実装する特定の方法を誰かが知っている場合は、ぜひご覧ください。

21
T-SQLを使用してサブ文字列が最後に出現するインデックスを検索する
SQLを使用して文字列が最後に出現するインデックスを見つける簡単な方法はありますか?現在SQL Server 2000を使用しています。基本的に、.NET System.String.LastIndexOfメソッドが提供する機能が必要です。少しグーグルでこれが明らかになりました- 「最後のインデックスを取得する関数」 -しかし、「テキスト」列式を渡した場合は機能しません。他の場所で見つかった他の解決策は、検索しているテキストが1文字である場合にのみ機能します。 たぶん関数を作り直さなければならないでしょう。私がそうするなら、皆さんがそれを見て多分利用できるように、私はここにそれを投稿します。


5
データベース内のすべてのストアドプロシージャに対する実行権限をユーザーに付与しますか?
古いデータベースからスクリプトを生成し、新しいデータベースを作成して、古いデータベースからすべてのデータをインポートしました。ただし、これまでのところ、ストアドプロシージャの実行権限を持っているユーザーはいません。私は使用できることを知っています GRANT EXECUTE ON [storedProcName] TO [userName] しかし、それがいくつかの手順である場合、私は約100を持っているので、特定のユーザーにすべてのユーザーに実行アクセス権を付与する最も簡単な方法は何ですか? 前もって感謝します。


4
SQL Server 2000データベースで開いているトランザクションを一覧表示する方法はありますか?
SQL Server 2000データベースで開いているトランザクションを一覧表示する方法を知っている人はいますか? sys.dm_tran_session_transactionsSQL 2005以降のデータベースバージョンのビューをクエリできることは承知していますが、SQL 2000では使用できません。

1
テーブル作成時のデフォルトの制約の宣言
GUIを使用する代わりにコードを記述して、Microsoft SQL Server 2000で新しいテーブルを作成しています。「手動で」行う方法を学習しようとしています。 これは私が実際に使用しているコードであり、正常に動作します。 CREATE TABLE "attachments" ( "attachment_id" INT NOT NULL, "load_date" SMALLDATETIME NOT NULL, "user" VARCHAR(25) NOT NULL, "file_name" VARCHAR(50) NOT NULL, CONSTRAINT "pk_attachments" PRIMARY KEY ("attachment_id"), CONSTRAINT "fk_users" FOREIGN KEY ("user") REFERENCES "users" ("user"), CONSTRAINT "ch_load_date" CHECK ("load_date" < GETDATE()) ) 主キー、外部キー、およびチェック制約を独自に指定したのは、この方法でそれらの名前を定義できるからです。そうしないと、それらをインラインで宣言すると、SQL Serverがランダムな名前を生成してしまい、「好き」ではありません。 デフォルト値の制約を宣言しようとしたときに問題が発生しました。インターネット上の情報とMicrosoft SLQ Server …

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