7

谁能看看我的说法...

DECLARE @tblName varchar(MAX), 
        @strSQL varchar(MAX)

SET @tblName ='SELECT DISTINCT o.name as TableName 
                 FROM sysobjects o 
                 JOIN sysindexes x on o.id = x.id  
                WHERE o.name LIKE ''%empty%'''  

SET @strSQL = 'INSERT INTO @tblName VALUES(''trylng'', ''1'')'
EXEC (@strSQL)

我的错误是...

Msg 1087, Level 15, State 2, Line 1
必须声明表变量“@tblName”。

我想要做的是获取变量上的表名并在变量中@tblName插入一些数据@strSQL

例如......结果@tblNameCustomerInfo

然后@strSQL我将@tblName在我的插入命令中使用结果作为我的表名。

所以@strSQL变量将是;

INSERT INTO CustomerInfo VALUES(......)
4

3 回答 3

2

从我对您其他问题的回答中试试这个:

 SELECT TOP 1 @tblName = t.name
 FROM sys.tables t
 INNER JOIN sys.indexes i on i.object_id = t.object_id  
 WHERE t.name LIKE '%empty%'

 SET @strSQL = 'INSERT INTO ' + @tblName  + ' VALUES(''trylng'', ''1'')'
 EXEC (@strSQL)

仍然没有提及您正在使用的 SQL Server 版本。但从 SQL Server 2005 或更高版本开始,您应该停止使用sysobjects,而是使用包含或多或少相同信息但更容易获得sysindexes的新架构。sys

请参阅 [MSDN:查询 SQL Server 系统目录][1],了解有关新sys架构中可用内容以及如何充分利用它的更多信息!

于 2012-02-23T06:15:08.690 回答
2

当您使用单个 DECLARE 语句声明多个变量时,您只需将类型放入一次(在末尾):

DECLARE @tblName, @strSQL varchar(MAX)
于 2012-02-23T06:03:56.640 回答
1

这应该是可以真正运行的东西:

DECLARE @tblName varchar(MAX), 
        @strSQL varchar(MAX)

SET @tblName =  (SELECT DISTINCT TOP 1  o.name as TableName 
                 FROM sysobjects o 
                 JOIN sysindexes x on o.id = x.id  
                WHERE o.name LIKE '%empty%')

SET @strSQL = 'INSERT INTO ' + @tblName + ' VALUES(''trylng'', ''1'')'
EXEC (@strSQL)

引号中的任何内容都表示这是一个字符串,不要期望 sql server 将其作为语句运行,与字符串中的变量相同,您不能引用它

于 2012-02-23T06:11:52.217 回答