2015-08-20 33 views
0

我試圖從一個表複製數據到另一個使用全局參數來定義本地參數。本地參數的字符串值被適當地更改,但是,當我嘗試將它們用作引用的列名稱時,它會填充我試圖僅使用參數的值而不是來自列的值的列其他表。我是sql新手,所以我被卡住了。使用參數將數據從一個表複製到另一個

DECLARE @ProductName VarChar(255), @SiteName VarChar(255) 

SET @ProductName = 
    CASE @@[Level] 
     WHEN 1 THEN 'MaterialAggName' 
     WHEN 2 THEN 'TradeAggName' 
     WHEN 3 THEN 'ProfitCenterAggName' 
     WHEN 4 THEN 'PerformanceCenterAggName' 
     WHEN 5 THEN 'ValueCenterAggName' 
     WHEN 6 THEN 'BusinessAggName' 
    END; 

SET @SiteName = 
    CASE @@[CustomerLevel] 
     WHEN 1 THEN 'Customer_Postal_Name' 
     WHEN 2 THEN 'Customer_3DigitPostal_Name' 
     WHEN 3 THEN 'Customer_Location_Name' 
     WHEN 4 THEN 'Customer_Region_Name' 
     WHEN 5 THEN 'Customer_County_Name' 
     WHEN 6 THEN 'Customer_GeoBusiness_Name' 
    END; 

CREATE TABLE [dbo].[Temp_Demand] 
(
SiteName VarChar(255), 
ProductName VarChar(255), 
Quantity Int 
) 

INSERT INTO [dbo].[Temp_Demand] (SiteName, ProductName, Quantity) 
SELECT @SiteName, @ProductName, Final 
FROM [dbo].[Customers_Master] 

有什麼建議嗎?

+0

什麼是@@ [Level]'和@@ [CustomerLevel]' – Praveen

+0

由於發佈您的問題沒有多大意義。你可以看看這篇文章開始。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

+0

您需要使用「動態SQL」才能爲列名使用變量。谷歌並瞭解動態SQL。 –

回答

0

要做到這一點,你需要使用動態SQL,你的插入語句需要類似的東西。

DECLARE @SQL NVARCHAR(MAX) 

Set @SQL = 'INSERT INTO [dbo].[Temp_Demand] (SiteName, ProductName, Quantity) 
SELECT ''' + @SiteName + ''', ''' + @ProductName + ''', Final 
FROM [dbo].[Customers_Master]' 

sp_executesql @SQL 

如果有多個插入值更改值,只需將其放入一個循環即可。 *除當然聲明。

相關問題