2016-03-28 73 views
0

1個可變有人能檢查什麼不對這個代碼?我已經檢查了其他問題以供參考,但它仍然不起作用。SQL服務器:設置2列到從變量表

enter image description here

declare @sourceTable varchar(500) 
declare @year varchar(22) 
declare @month varchar(3) 
declare @test varchar(12) 
declare @result varchar(8) 
declare @index int 

declare @string varchar(15) 
set @string = (SELECT DISTINCT TOP 1 REPLACE(dbo.fn_Parsename(WHOLEROW, '|', 0), CHAR(9), '') FROM #temp1) 
set @test = (select UPPER(convert(datetime,substring(@string,2,charindex('-',@string,1)-2)))) 
set @month =(left(@test,3)) 

set @year = (right(@test,5)) 

set @result = @month + @year 
-- select @result 

set @sourceTable = 'gen_048_'[email protected] 
select @sourceTable 

declare @string2 varchar(255) 
set @string2 = (select convert(varchar(55),refdate)+''-''+convert(varchar(55),refcount) FROM @sourceTable) 
select @string2 

這是錯誤

必須聲明表變量 「@sourceTable」。

+0

什麼是'@ test'的價值?你現在得到什麼?你希望取得什麼? –

+0

首先提及你當前的代碼有什麼問題 –

+0

需要動態查詢 –

回答

2

你需要

SET @string2 = 'select convert(varchar(55),refdate)+''-''+convert(varchar(55),refcount) FROM ' 
       + Quotename(@sourceTable) 

EXEC (@string2) 
+0

謝謝〜!這個工作得很好。我現在唯一的問題是如何更新這個參考號碼的行。 –

0
set @string2 = (select convert(varchar(55),refdate)+'-'+convert(varchar(55),refcount) FROM @sourceTable) 
+0

我已經做了這一個,這是從另一個問題,但它不工作的確切字符串。這是錯誤'必須聲明表變量'@sourceTable'。' –

+0

明顯來自您提供的代碼,沒有這樣的變量:@sourceTable –

+0

它似乎「@sourceTable」是varchar?所以你再添加一行這樣的東西。 ==>聲明「@sourceTable」varchar(15) –

1

您還沒有宣佈@sourcetable動態查詢,誤差呼喊它響亮而清晰。

添加這個開頭:

declare @sourcetable varchar(50) 

而且,我相信你需要使用動態SQL這類查詢和使用可變的。

+0

是的,我宣佈@sourceTable這就是爲什麼它有點奇怪,我仍然有這個錯誤。我忘了把它放在那裏。 –