2016-12-06 36 views
3

我试图将数据插入具有特定值的表的多个列中。但是,一个varchar列的数据值将来自放置在引号内的另一个表select语句。将数据插入表中,并将值插入另一个select语句的引号内

我需要它放在里面,而不必将sub 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

目前您select查询只会被当作一个字符串,因为它是单引号括。该查询将被插入列中,而不是结果。

这是正确的做法:

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

嗯,甜甜的SQL注入攻击。 –

+0

当插入到varchar中时,table_2的column_1上的数据是bigint。我遇到错误转换数据类型。我错过了什么? – Dren

+0

@Dren - 那么你需要明确地转换为'varchar',然后连接字符串 –

相关问题