3

今、それは次のような挿入を生成します

INSERT [Bla] ([id], [description], [name], [version])
VALUES (CAST(1 AS Numeric(19, 0)), convert(t...

これは非常に SQL Server 固有のものです。データベースにとらわれず、誰もが使えるスクリプトを作成したいと考えています。私は非常に単純なデータ型を持っています - varchars、numbers、dates、bits(boolean)。

おもう

insert into bla values (1, 'die', '2001-01-01 11:11:11')

すべての DBMS で動作するはずですよね?

4

3 に答える 3

3

いくつかの基本的なルール:

角かっこを取り除きます。あなたの場合、それらは必要ありません-SQL Serverでも必要ありません。(同時に、列名またはテーブル名に予約語や特殊文字を使用しないようにしてください)。

特殊文字や予約語を使用する必要がある場合 (これはお勧めしません)、標準の二重引用符 ("GROUP" など) を使用してください。

ただし、名前は大文字と小文字my_tableが区別されることMY_TABLEに注意してください。これも、DBMS とその構成によって異なる場合があります。"my_table""MY_TABLE"

CAST 演算子は標準であり、ほとんどの DBMS で機能します (すべての DBMS がすべての可能な組み合わせでキャストをサポートしているわけではありません)。

convert() は SQL Server 固有のものであり、適切な CAST 式に置き換える必要があります。

正しいデータ型で値を指定するようにしてください。暗黙的なデータ変換に頼らないでください (したがって、数値に '1' を使用しないでください)。1 を numeric() にキャストする必要はないと思いますが。

通常DATE '2011-03-14'、DATE/TIMESTAMP リテラルには ANSI リテラル (例: ) を使用することもお勧めしますが、SQL Server はそれをサポートしていません。ですから、あまり役に立ちません。

于 2011-03-14T09:26:49.703 に答える
2

SQL に関するウィキペディアの記事をざっと見てみると、MS SQL、PostgreSQL、Oracle などのさまざまな実装での SQL の標準化について少しわかります。

つまり、ANSI 規格は多数ありますが、製品ごとにさまざまなサポートがあります。

ソフトウェア製品から複数のデータベース サーバーをサポートする一般的な方法は、違いがあることを受け入れ、それらをデータベース レベルでコーディングし、アプリケーションがデータベース サーバーに関係なく同じデータベース アクセス コードを呼び出せるようにすることです。

于 2011-03-14T08:51:00.107 に答える
0

dbmses 間で移植されない数値形式には多くの問題がありますが、日付と日付形式の問題を見ると、これは見劣りします。たとえば、ORACLE DB で使用されるデフォルトの DATE 形式は、ソフトウェアをインストールした人の気まぐれに依存します。日付変換関数を使用して、ORACLE が一般的な日付形式を受け入れるようにすることができますが、これらの関数は ORACLE 固有です。

また、テーブルと列の名前がターゲット DB で同じになることをどのように知っていますか?

これに真剣に取り組んでいる場合は、水素を含む DBMS 間でデータを移植する必要があり、perl について少し知っている必要があります。次に、CPAN から入手できる SqlFairy を使用してみてください。このダウンロードの巨大なサイズは、この問題がいかに複雑であるかを納得させるのに十分なはずです.

于 2011-03-15T09:16:01.937 に答える