声明SQL变量 - SQL Server

时间:2012-02-23 06:00:53

标签: sql-server sql-server-2008 variables declare

任何人都可以查看我的陈述......

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变量中插入一些数据

例如...... @tblName中的结果为CustomerInfo

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

所以@strSQL变量将是;

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

3 个答案:

答案 0 :(得分:2)

当您使用单个DECLARE语句声明多个变量时,you only put the type once(最后):

DECLARE @tblName, @strSQL varchar(MAX)

答案 1 :(得分: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或更高版本开始,您应该停止使用sysobjectssysindexes - 而是使用包含或多或少相同信息的新sys架构 - 但更容易使用。

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

答案 2 :(得分: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将它作为语句运行,对于字符串中的变量也是如此,你不能引用它