2010-12-28 6 views
1

テーブル内のデータのINSERT SQLの作成をスクリプトしようとしています。列1でT-SQL SELECTステートメントの出力でシングルクォートを二重シングルクォートに切り替えるには

DECLARE @HEADER varchar(255) 

SET @HEADER = 'insert into Table (Column1 , Column2) 
values (N''' 

SELECT 
@Header + Column1 + ''', N''' + Column2 + ''')' 
+ CHAR(10) 
FROM Table 
ORDER BY Column1 

(スクリプトに組み込まれたSQL Serverのと同様に)私は、単一引用符を含むテキストを持っていると私はそれが二重の単一引用符で囲まれたテキストとして出てくる必要があるようなSQLから直接「スクリプトを生成」を使用する際にそれはありませんサーバ。

答えて

4

引用符を二重にするにはREPLACE関数を使用します。結果の文字列を引用符で囲む必要があります。これはNOT NULL列で機能するので、null可能な列をサポートする必要がある場合は調整してください。

SELECT 
    'INSERT INTO Table (Column1, Column2) VALUES (N''' + 
    REPLACE(Column1, '''', '''''') + ''', N''' + 
    REPLACE(Column2, '''', '''''') + ''')' 
FROM Table 
ORDER BY Column1 
+0

QuoteNameは私のために働くでしょうBUT Column1 = nvarchar(2000)とQUOTENAMEはnvarchar(258)に制限されています。 –

+0

@Chris:説明をありがとう。 'REPLACE'を使って修正された解を調べてください。 –

+1

ありがとうございました! –

2

QUOTENAME機能を使用できます。

SELECT 
@Header + QUOTENAME(Column1) + ''', N''' + Column2 + ''')' 
+ CHAR(10) 
FROM Table 
ORDER BY Column1 
0

既存のテーブルに基づいて挿入スクリプトを生成すると思いますか?

をダウンロードすることをおすすめします。これは、SSMSで使用するための追加機能を備えた素晴らしい機能です。これらの機能の1つでは、テーブルを右クリックすると、テーブル内のデータを含む挿入スクリプトが生成されます。

+0

SSMSは素晴らしいですが、クライアントのフォーマットに合わせて出力を大幅に処理する必要があります。生成されたスクリプトのグローバル置換を行わない方法でSSMS出力を再作成しようとしています。 SQLの場合はすべて小文字でなければならないので、挿入する前に改行を追加する必要があります。カラム名を囲むデフォルトの括弧は削除する必要があります。 –

関連する問題