2017-04-08 54 views
0

我試圖執行語句以將變量附加到表名稱。我是新來的SQL和我找不到在線問題的解決方案。當在sql server中使用時間變量時,必須聲明標量變量

Declare @t time 
Set @t='12:00:00.1' 
Declare @ttable varchar (255) 
Set @ttable='Temp'+(Select top 1 ID from mtable) 

    Exec('Insert into '[email protected]+'(Timestamp) values ('+'@t'+')') 

每當我運行此查詢我得到以下錯誤:

Msg 137, Level 15, State 2, Line 1 Must declare the scalar variable "@t".

我不知道到底是什麼,我上運行。我剛剛打開SQL Server Management Studio(SQL Server 2008 R2)並創建了一個數據庫和表。任何幫助深表感謝。

+1

串門@t報價在EXEC? –

+0

編輯您的問題並提供樣本數據,所需結果並解釋您正在嘗試執行的操作。 「將變量附加到表名」是不明智的。 –

回答

1

動態調用SQL語句的正確方法是使用sp_executesql和參數。假設你的表已經存在,你會怎麼做:

Declare @t time; 
Set @t = '12:00:00.1'; 

Declare @tablename varchar(255); 

Set @tablename = 'Temp'+ (Select top 1 ID from mtable); 

declare @sql nvarchar(max) 
set @sql = 'Insert into @tablename(Timestamp) values (@t)'; 

set @sql = replace(@sql, '@tablename', @tablename); -- alas, cannot use parameters for table names 

exec sp_executesql @sql, N'@t time', @t = @t; 

我不認爲這是一個貧窮的數據庫設計是構建這樣的表名。相反,您應該有一個表格和id的附加列。

+0

這給我以下錯誤: 消息102,級別15,狀態1,行6 '='附近的語法不正確。 消息137,級別15,狀態2,行7 必須聲明標量變量「@sql」。 消息137,級別15,狀態2,行9 必須聲明標量變量「@sql」。 – Kuba

+0

@Kuba答案編輯現在試試吧 – Hadi

+0

這工作。謝謝! – Kuba

0

你可以試試這個

Declare @t time 
declare @tVar varchar(max) 
Set @t='12:00:00.1' 
set @tVar=CONVERT(VARCHAR,@t) 
Declare @ttable varchar (255) 
Set @ttable='Temp'+(Select '1') 

    --PRINT('Insert into '[email protected]+'(Timestamp) values ('+CONVERT(VARCHAR,@t)+')') 
    EXEC ('Insert into '[email protected]+'(Timestamp) values ('[email protected]+')')