1

I have the following problem when inserting some values coming from a subquery.

I want to insert all values from this query:

(SELECT INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME + FORMAT(convert (datetime,date)  ,   'ddMMyyyy') +'EUR'+'0' as devID , 'XXX' as dev2 from kat.[dbo].[Conversions]  LEFT  OUTER JOIN INFORMATION_SCHEMA.COLUMNS   on INFORMATION_SCHEMA.COLUMNS.TABLE_NAME =  'Conversions' and INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION = 3)

What this query returns is the following data (and more rows with the following format): Columns (devID & dev2)
devID   // dev2
YYY05102017XXX0 // EUR
XXX04102017XXX0  // EUR
ZZZ03102017XXX0  // EUR

This contains the data I want to insert but when inserting into a view: I receive the following error:

Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

This is the query to insert the values:

insert into ConversionsTable( devID, dev2) values  (
(SELECT INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME + FORMAT(convert (datetime,date)  ,   'ddMMyyyy') +'EUR'+'0' as devID , 'XXX' as dev2 from kat.[dbo].[Conversions]  LEFT  OUTER JOIN INFORMATION_SCHEMA.COLUMNS   on INFORMATION_SCHEMA.COLUMNS.TABLE_NAME =  'Conversions' and INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION = 3))

Do you know where could I find the problem?

1
  • 1
    Remove the VALUES clause from your insert and do directly INSERT INTO ... SELECT ... Commented Oct 17, 2017 at 10:54

2 Answers 2

2

Try removing VALUES :

insert into ConversionsTable( devID, dev2) 
SELECT INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME + FORMAT(convert (datetime,date)  ,   'ddMMyyyy') +'EUR'+'0' as devID , 'XXX' as dev2
from kat.[dbo].[Conversions] 
LEFT  OUTER JOIN INFORMATION_SCHEMA.COLUMNS  
 on (INFORMATION_SCHEMA.COLUMNS.TABLE_NAME =  'Conversions' 
and INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION = 3)
Sign up to request clarification or add additional context in comments.

Comments

1

You want insert . . . select. However, you don't need a left join.

insert into ConversionsTable( devID, dev2)
    select cols.COLUMN_NAME + FORMAT(convert(datetime, c.date), 'ddMMyyyy') + 'EUR' + '0' as devID,
           'XXX' as dev2
    from kat.[dbo].Conversions c join
         INFORMATION_SCHEMA.COLUMNS cols 
         on cols.TABLE_NAME = 'Conversions' and c.ORDINAL_POSITION = 3;

In addition, you should include the TABLE_SCHEMA in your query (two tables can have the same name in different schema.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.