我正在尝试执行这个查询:
declare @tablename varchar(50)
set @tablename = 'test'
select * from @tablename
这会产生以下错误:
编号1087,16层,状态1,5线 必须声明表变量“@tablename”。
动态填充表名的正确方法是什么?
我正在尝试执行这个查询:
declare @tablename varchar(50)
set @tablename = 'test'
select * from @tablename
这会产生以下错误:
编号1087,16层,状态1,5线 必须声明表变量“@tablename”。
动态填充表名的正确方法是什么?
当前回答
还有,你可以用这个…
DECLARE @SeqID varchar(150);
DECLARE @TableName varchar(150);
SET @TableName = (Select TableName from Table);
SET @SeqID = 'SELECT NEXT VALUE FOR ' + @TableName + '_Data'
exec (@SeqID)
其他回答
使用sp_executesql来执行任何SQL,例如:
DECLARE @tbl sysname,
@sql nvarchar(4000),
@params nvarchar(4000),
@count int
DECLARE tblcur CURSOR STATIC LOCAL FOR
SELECT object_name(id) FROM syscolumns WHERE name = 'LastUpdated'
ORDER BY 1
OPEN tblcur
WHILE 1 = 1
BEGIN
FETCH tblcur INTO @tbl
IF @@fetch_status <> 0
BREAK
SELECT @sql =
N' SELECT @cnt = COUNT(*) FROM dbo.' + quotename(@tbl) +
N' WHERE LastUpdated BETWEEN @fromdate AND ' +
N' coalesce(@todate, ''99991231'')'
SELECT @params = N'@fromdate datetime, ' +
N'@todate datetime = NULL, ' +
N'@cnt int OUTPUT'
EXEC sp_executesql @sql, @params, '20060101', @cnt = @count OUTPUT
PRINT @tbl + ': ' + convert(varchar(10), @count) + ' modified rows.'
END
DEALLOCATE tblcur
变量不能使用表名。你必须这样做:
DECLARE @sqlCommand varchar(1000)
SET @sqlCommand = 'SELECT * from yourtable'
EXEC (@sqlCommand)
Declare @tablename varchar(50)
set @tablename = 'Your table Name'
EXEC('select * from ' + @tablename)
您需要使用SQL Server动态SQL:
DECLARE @table NVARCHAR(128),
@sql NVARCHAR(MAX);
SET @table = N'tableName';
SET @sql = N'SELECT * FROM ' + @table;
使用EXEC执行任何SQL:
EXEC (@sql)
使用EXEC sp_executesql执行任何SQL:
EXEC sp_executesql @sql;
使用EXECUTE sp_executesql执行任意SQL:
EXECUTE sp_executesql @sql
还有,你可以用这个…
DECLARE @SeqID varchar(150);
DECLARE @TableName varchar(150);
SET @TableName = (Select TableName from Table);
SET @SeqID = 'SELECT NEXT VALUE FOR ' + @TableName + '_Data'
exec (@SeqID)