在sql server中使用时间变量时必须声明标量变量

在sql server中使用时间变量时必须声明标量变量,sql,sql-server,sql-server-2008-r2,exec,Sql,Sql Server,Sql Server 2008 R2,Exec,我试图执行一条语句,以便将变量附加到表名。我是sql新手,无法在线找到解决此问题的方法 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 '+@ttable+'(Timestamp) values ('+'@t'+')') 每当运行此查询时,都会出现以下错误: 味精137

我试图执行一条语句,以便将变量附加到表名。我是sql新手,无法在线找到解决此问题的方法

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 '+@ttable+'(Timestamp) values ('+'@t'+')')
每当运行此查询时,都会出现以下错误:

味精137,第15级,第2状态,第1行 必须声明标量变量“@t”


我不确定我到底在跑什么。我刚刚打开了SQLServerManagementStudio(SQLServer2008R2)并创建了一个数据库和表。非常感谢您的帮助。

动态调用SQL语句的正确方法是使用
sp\u 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

创建一个表和一个附加列。您可以试试这个

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 '+@ttable+'(Timestamp) values ('+CONVERT(VARCHAR,@t)+')')
    EXEC  ('Insert into '+@ttable+'(Timestamp) values ('+@tVar+')')

在exec?中删除@t周围的引号,编辑您的问题,提供示例数据、所需结果,并解释您试图做的事情。“将变量附加到表名”是不合理的。这给了我以下错误:Msg 102,级别15,状态1,第6行“=”附近的语法不正确。Msg 137,级别15,状态2,第7行必须声明标量变量“@sql”。Msg 137,级别15,状态2,第9行必须声明标量变量“@sql”。