在sql server中使用时间变量时必须声明标量变量
我试图执行一条语句,以便将变量附加到表名。我是sql新手,无法在线找到解决此问题的方法在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
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”。