タグ付けされた質問 「scripting」

データベースオブジェクト定義のスクリプト作成など、言語スクリプトの生成または使用に関する質問。

5
SQL Server 2012:コマンドラインからのスクリプトの生成
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 5年前に移行され ました。 SQL Server 2012を実行しています。 SQL Server Management Studioには、データベースを右クリックして、[タスク]および[スクリプトの生成]を選択するオプションがあります。 コマンドライン経由でそれを自動化する方法はありますか? データベース全体のスキーマとデータを含むスクリプトを作成したい。 ツールのようにScriptDBしてsqlpubwiz.exe、すべては何SQL Server 2012のについてSQL Serverの2005を対象とするように見えますか?

3
SQLクエリコードの繰り返しを防ぐために、文字列を連結したり、手続きを行ったりする代わりになりますか?
免責事項:データベースを使用する作業時間のごく一部としてのみ、私と一緒に我慢してください。(ほとんどの場合、仕事でC ++プログラミングを行いますが、奇数月ごとにOracleデータベースで何かを検索/修正/追加する必要があります。) アドホッククエリとアプリケーションに組み込まれたクエリの両方で、クエリの大部分が「コード」を繰り返しただけの複雑なSQLクエリを繰り返し書く必要がありました。 伝統的なプログラミング言語で、そのような憎むべきを書く深いトラブルにあなたを得るでしょう、まだI(Iは)まだSQLクエリコードの繰り返しを防ぐために、まともな手法を見つけることができませんでした。 編集:最初に、元の例に優れた改善を提供してくれた回答者に感謝します。ただし、この質問は私の例に関するものではありません。SQLクエリの反復性についてです。そのため、これまでの回答(JackP、Leigh)は、より良いクエリを作成することで反復性を減らすことができることを示す素晴らしい仕事をしています。ただし、その場合でも、明らかに削除できない反復性に直面します。これは、常にSQLに悩まされます。「従来の」プログラミング言語では、コードの反復性を最小限に抑えるためにかなり多くのリファクタリングを行うことができますが、SQLでは、これを可能にする(?)ツールはないようです。 Oracleタグを再度削除したことに注意してください。これは、データベースやスクリプト言語が存在しないかどうかに興味があるためです。 今日私が一緒に石畳を作ったそのような宝石の一つです。基本的に、単一のテーブルの列セットの違いを報告します。次のコードをざっと読んでください。最後に大きなクエリ。以下に続きます。 -- -- Create Table to test queries -- CREATE TABLE TEST_ATTRIBS ( id NUMBER PRIMARY KEY, name VARCHAR2(300) UNIQUE, attr1 VARCHAR2(2000), attr2 VARCHAR2(2000), attr3 INTEGER, attr4 NUMBER, attr5 VARCHAR2(2000) ); -- -- insert some test data -- insert into TEST_ATTRIBS values ( 1, …

3
クライアントからSQL Serverへの接続を確認する簡単な方法
トラブルシューティングの目的で、SQL Serverに接続できない可能性のあるアプリケーションとは無関係に、クライアントがSQL Serverインスタンスに接続できるかどうかを確認したいと思います。 デフォルトのWindowsシステムツールを使用してこれを行う簡単な方法(つまり、サードパーティのソフトウェアをインストールする必要はありません)はありますか?おそらくスクリプトまたはネットワークアプリケーションを使用していますか?

6
Redgate SQL CompareとVisual Studio 2010 Premium / Ultimateデータベースプロジェクト
現在、データベーステンプレートをプロジェクトテンプレートとして使用しているVisual Studio Professional Editionを使用していますが、その一部の機能(スキーマ比較ツールなど)は使用できません。スキーマ比較とデータベース更新スクリプトの生成は、Visual Studio 2010 Premium / Ultimateバージョンでのみ使用できます。 しかし、Visual Studioのスキーマ比較および更新スクリプト生成機能は、Redgate SQL Compareツールの機能と同じくらい充実していますか?(私も使用しませんでした)機能比較リストを見つけることができませんでした。両方を使用した人は、それを明確にするのに役立つでしょうか?

1
ユーザー共有クエリ:動的SQLとSQLCMD
foo.sqlDB技術サポートのチームが共有する多数のクエリをリファクタリングして文書化する必要があります(顧客の構成など)。各顧客が独自のサーバーとデータベースを持っている場合に定期的に来るチケットの種類がありますが、それ以外はスキーマは全面的に同じです。 現時点では、ストアドプロシージャはオプションではありません。私は動的またはSQLCMDのどちらを使用するかを議論しています。SQLServerを少し使い始めたばかりなので、どちらもあまり使用していません。 SQLCMDスクリプティング私は間違いなく「見た目」がきれいで、必要に応じてクエリを読みやすく、小さな変更を加えやすいと感じていますが、ユーザーにSQLCMDモードを強制的に有効にします。文字列操作を使用して記述されたクエリにより、構文の強調表示が失われるため、動的はより困難になります。 これらは、Management Studio 2012、SQLバージョン2008R2を使用して編集および実行されています。どちらの方法の長所/短所、またはいずれかの方法でのSQL Serverの「ベストプラクティス」の一部は何ですか?それらの1つは他よりも「安全」ですか? 動的な例: declare @ServerName varchar(50) = 'REDACTED'; declare @DatabaseName varchar(50) = 'REDACTED'; declare @OrderIdsSeparatedByCommas varchar(max) = '597336, 595764, 594594'; declare @sql_OrderCheckQuery varchar(max) = (' use {@DatabaseName}; select -- stuff from {@ServerName}.{@DatabaseName}.[dbo].[client_orders] as "Order" inner join {@ServerName}.{@DatabaseName}.[dbo].[vendor_client_orders] as "VendOrder" on "Order".o_id = "VendOrder".vco_oid where "VendOrder".vco_oid …

3
自動化された方法でOracle DDLをスクリプト化する
Oracle SQL DeveloperはTools -> Database Export...これを介してDDLをエクスポートできますが、これは非常に効果的ですが、手動による介入が必要です。 私は知っDBMS_METADATA.get_ddl()ていますが、エクスポートが完璧ではないことを発見しました。エクスポートされたDBMS_METADATADDLが、キーワードの途中での区切りなどの問題を修正することなく使用できないという問題に遭遇しました。ただし、DMBS_METADATA手動で修正することなく実行できるDDLのエクスポート方法を知っている人がいれば、それも素晴らしい解決策になります。 基本的に、手動でエクスポートしたものと同じ DDLをエクスポートする自動/スクリプト可能な方法を探しています。 どうやってやるの?

1
SQL Server / T-SQLは長い文字列を分割するために行継続をサポートしていますか?
私は、1つ以上の非常に長い(時には愚かな長い)文字列を含むSQLスクリプトを使用していることがあります。通常、これらはVARBINARYファイル/アセンブリを表すリテラル/定数ですが、テキストの場合もあります。 本当に長い文字列の主な問題は、一部のテキストエディターでは文字列をうまく処理できないことです。たとえばVARBINARY、CREATE ASSEMBLY [AssemblyName] FROM 0x....ステートメントで使用するリテラルがあり、アセンブリ自体のサイズは1 MBをわずかに超えています。これは、各バイトが16進表記で表されるために2文字を必要とするため、テキストファイルでは200万文字を少し上回ります。 (例0x1F= a 1およびan F)。SQL Server Management Studio(SSMS)はこれをうまく処理せず、その行をスクロールしようとすると数秒間ハングします。実際、一部のバージョン(これがまだ発生するかどうかは不明)では、特定の長さの行が少なくとも1行あるスクリプトを開くと、長い行に関する警告が表示されることもあります。 2番目の問題は、ワードラップを有効にせずにエディターで使用したり、オンラインで投稿したりすると、フォーマットが複雑になることです。ここでの問題は、水平スクロールバーのスライダーが非常に狭く、通常は少しでもそれを移動すると、非超長いテキストがスクロールして見えなくなるということです。 現在、T-SQLはコマンドを改行またはセミコロンで終了しません(SQL Server 2005以降、セミコロンが推奨/推奨されています)。したがって、SQL Serverは各ステートメントを解析する方法を知っているので、いつ終了するかがわかるので、newline/ carriage-return+ だけで区切られた長い行を複数の行に分割するline-feedように見えるのは、不合理に見えません。しかし、これはどちらの場合でも機能しません。 PRINT 'Line1 Line2'; 戻り値([メッセージ]タブ): Line1 Line2 そして、改行はリテラル/定数内にあるので、それは十分に理にかなっています。しかし、これを行うことVARBINARYもできません。 PRINT 0x1234 5678; エラーが出ます。

4
列の制約(インデックス)の削除
インデックスがあるテーブルのタイプを変更するにはどうすればよいですか?空のテーブルで列を変更して型を日付時刻からvarchar(15)に変更しようとしましたが、列(インデックスであることが判明)に依存しているというエラーが表示されました。 インデックスを右クリックしてドロップをスクリプト化することで、これをローカルで簡単に回避できましたが、インデックス名にアクセスできない他のサーバーでこれを展開する必要があります。 インデックスを削除するスクリプトを作成する方法はありますか?列でそのデータ型を変更してからインデックスを読み取ることができますか?ありがとう!

5
スキーマの変更後に壊れたストアドプロシージャを検出するにはどうすればよいですか?
データベースの中央のテーブルを変更しました。sp_dependsは文字通り数百の結果を返します。変更後、これらのストアドプロシージャの一部がコンパイルされないのではないかと心配しています。 1つのストアドプロシージャを確認するのは簡単です(変更スクリプトを再実行して、操作が成功するかどうかを確認するだけです)が、100以上のプロシージャでそれを行うのは少し面倒です。 このようなスクリプトを使用してデータベースのすべてのオブジェクトを再コンパイルできることはわかっていますが、実際の操作は、ストアドプロシージャが次に実行されたときにすぐにではなく、実行されるため、私の場合は適切ではないようです。 また、すべてのストアドプロシージャを完全に削除し、データベースをソース管理システムで再同期できると考えていましたが、このオプションは実行可能ではありますが、あまりエレガントではありません。これを行うより良い方法はありますか? SQLServer 2008 R2を使用していますが、データベーススクリプトはVS 2008データベースプロジェクトに保存されています。 明確にするために、私はコードをテストするためにこのアプローチだけに頼るべきだと主張しているのではありません。C#とまったく同じように、コードを作成するときに他の依存ファイルの構文エラーを瞬時に検出します(その後、通常は数桁遅いユニットテストなどの他の戦略を使用してテストします)、SQLの依存関係を検出することは理にかなっていると思います通常は完了するまでに数時間かかる完全な機能テストを実行する必要がなく、数秒でエラーが発生します。

2
スキーマのすべての権限をスクリプト化する方法
SQL管理スタジオでは、すべてのdbオブジェクトのスクリプトを作成できますが、これまでのところ、スキーマまたはユーザーを正しくスクリプト化する方法を見つけることができませんでした。スキーマに対するユーザーの権限は、作成されるスクリプトには含まれません。私は何か間違ったことをしたのでしょうか、それともMSFTは少しずさんなのですか?

1
SQLSMSでSSMSから生成されたTSQLスクリプトを実行しています。引用に失敗
SQL Server Management Studioの「スクリプトの生成」ツールで生成されたスクリプトを実行して、データベースをマシンに配置しようとしています。 これが私が発行したコマンドです: sqlcmd -S LOCALHOST\sqlexpress -I -U user -P ******** -i C:\Rollouts\NI-9-25-2012_10-42-AM\Rollout.sql > rolloutlog.txt 次のようなエラーが表示されます。 Sqlcmd:エラー:ファイル 'C:\ Rollouts \ NI-9-25-2012_10-42-AM \ Rollout.sql'のコマンド '' 'の近くの39488行で構文エラー。 この行をテキストエディタで表示すると、すべての兆候が引用符の問題を示しています。 問題の行は次のようになります。 $( ''。cat-menu-new '')。slideDown( '' slow ''); スクリプト内の引用符をサポートするためにスクリプトを実行または生成する必要があるスイッチはありますか?

1
SQL * Plus、@、および相対パス
どういうわけか、SQL * Plus(少なくともWindowsでは)が呼び出され@@、パスが単一または二重のドットで始まる場合、相対パスを持つスクリプトを見つけることができないようです。 たとえばx:\some\where、次のディレクトリ構造があります。 script.sql main-dir\main-sub-dir call-script.sql script.sql つまり、2つですscript.sqlが、場所が異なります。 script.sql直下の内容x:\some\whereは単純です prompt SCRIPT root 他方script.sqlのコンテンツは prompt SCRIPT main-dir/main-subdir call-script.sql 読む @@script.sql @ script.sql 期待される出力 からSQL * Plusを起動してからx:\some\where、 @main-dir/main-sub-dir/call-scripts 出力は SCRIPT main-dir/main-subdir SCRIPT root シングル@はSQL * Plusが開始された場所@@からのパスを検索し、含まれているスクリプトのディレクトリからパスを検索することになっているため、これは予想されたものです。 予期しない出力 今、私がcall-scripts.sqlそう変更した場合: @@./script.sql @ ./script.sql double @@は、SQL * Plusが開始された場所からパスを検索するという点で、動作を変更しているように見え、出力は次のようになります。 SCRIPT root SCRIPT root これは私が期待したものではありません。 この動作はどこかに文書化されていますか、そしてもっと重要なcall-scripts.sqlことは、相対パス(@@../../other-dir/other-sub-dir/script)を正しく呼び出すように変更するにはどうすればよいですか?

2
SQL Serverのメンテナンスタスクに役立つPowerShellスクリプトのコレクションはありますか?
私はPowerShellを研究しており、日々のDBAタスクに(ゆっくりと)取り入れています。 これまでのところ、多くの異種の管理アクティビティーのために切断されたPowerShellスクリプトの束を見てきました。 私が知りたいのは、一般的なDBAアクティビティ(Ola HallengrenのT-SQLスクリプトのようなもの)のSQL Server PowerShellスクリプトに通常アクセスする公式(または認識可能な)PowerShellスクリプトコレクションまたはリポジトリがあるかどうかです。

1
SQL Server Mangement Studioがデフォルトでインデックスをスクリプト化しないのはなぜですか?
最近、デフォルトでデータベースのスクリプトにインデックスが含まれていないことに気付きました。毎回オプションを変更する必要があります。 誰かが理由を説明してもらえますか?このデフォルトの動作について何か洞察はありますか、それともMicrosoftがそうしたいという理由だけですか?

2
ハッシュされたパスワードでアプリケーションロールをスクリプト化する
ハッシュされたパスワードを使用してアプリケーションロールをスクリプト化する必要があるため、データベースから別のデータベースにコピーできます。 アプリケーションロールを使用して、信頼されていないユーザーに昇格されたアクセスを提供する次のサンプルコードを考えます。 USE tempdb; CREATE LOGIN LimitedLogin WITH PASSWORD = 'Password1' , CHECK_POLICY = OFF , CHECK_EXPIRATION = OFF; CREATE USER LimitedLogin FOR LOGIN LimitedLogin WITH DEFAULT_SCHEMA = dbo; CREATE APPLICATION ROLE MyAppRole WITH PASSWORD = 'Password2' , DEFAULT_SCHEMA = dbo; EXEC sp_addrolemember @rolename = 'db_datareader' , @membername = 'MyAppRole'; …

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