2014-08-29 102 views
3

可变我想插入:INSERT INTO与DB

  • 数据库TEST,表SUBJECT,现场aSubject@Database = 'TS'
  • 数据库TEST1,表SUBJECT,现场aSubject@Database = 'TS1'
  • 别的数据库DEMO,表SUBJECT,字段aSubject

我尝试这样做:

DECLARE @Database varchar(10) 
Set @Database = 'TS' 

INSERT INTO 
(
CASE 
WHEN @Database = 'TS' THEN 'TEST.dbo.SUBJECT' 
WHEN @Database = 'TS1' then 'TEST1.dbo.SUBJECT' 
ELSE 'DEMO.dbo.SUBJECT' END 
) (aSubject) 
SELECT 'Company' 

我得到错误:

Msg 102, Level 15, State 1, Line 5 
Incorrect syntax near '('. 
+3

表或列名不能是一个变量。实际上,您必须创建一个扩展变量的新SQL语句。一种方法是动态SQL,比如'declare @sql varchar(max)='select ...'; exec @sql;' – Andomar 2014-08-29 10:56:03

回答

4
DECLARE @Database SYSNAME; 
Set @Database = 'TS' 

SET @Database = CASE 
        WHEN @Database = 'TS' THEN 'TEST' 
        WHEN @Database = 'TS1' THEN 'TEST1' 
        ELSE 'DEMO' 
       END 


DECLARE @sql NVARCHAR(MAX); 


SET @sql= N' INSERT INTO ' + QUOTENAME(@Database) + N'.[dbo].[SUBJECT] ' 
     + N' SELECT ''Company'' ' 

EXECUTE sp_executesql @sql