2016-12-06 3 views
3

特定の値を持つテーブルの複数の列にデータを挿入しようとしています。しかし、1つのvarchar列のデータ値は、別の表選択文から得られ、引用符で囲まれています。別のselectステートメントの引用符内の値を持つテーブルにデータを挿入します

文字列の一部として解釈されるsub select文を使わずに、内部に配置する必要があります。以下は私の質問です。それは単一引用符で囲まれているので、現在お使いのselectクエリは単なる文字列のように扱われます

INSERT INTO Table1 
      (column1, 
      column2, 
      column3, 
      column4) 
VALUES  (484640, 
      4, 
      1, 
      '<HTML><Head></Head><Body><a href="cgroup-histstatus.aspx?Staging_PKID=(select distinct column_1 from Table_2)">Upload results</a></Body></HTML>') 

答えて

6

。クエリは結果にではなく、列に挿入されます。ここで

は正しい方法です:

INSERT INTO Table1 
      (column1, 
      column2, 
      column3, 
      column4) 
SELECT DISTINCT 484640, 
       4, 
       1, 
       '<HTML><Head></Head><Body><a href="cgroup-histstatus.aspx?Staging_PKID=' 
       + cast(column_1 as varchar(50)) 
       + '">Upload results</a></Body></HTML>' 
FROM Table_2 

あなたはcolumn_1からの値は、単一引用符で囲むことにしたい場合は、'''+ column_1 +''''+ column_1 +'を交換してください。

selectクエリが複数のレコードを返す場合でも、これは機能します。

+0

Mmm、甘い甘いSQLインジェクション攻撃。 –

+0

table_2のcolumn_1のデータはbigintで、挿入される列はvarcharです。データ型を変換中にエラーが発生します。私は何が欠けていますか? – Dren

+0

@Dren - 文字列と連結する前に、明示的に 'varchar'に変換する必要があります。 –

関連する問題