我正在尝试执行这个查询:
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 @sqlCommand varchar(1000)
SET @sqlCommand = 'SELECT * from yourtable'
EXEC (@sqlCommand)
其他回答
您需要使用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 @tablename varchar(50)
set @tablename = 'Your table Name'
EXEC('select * from ' + @tablename)
变量不能使用表名。你必须这样做:
DECLARE @sqlCommand varchar(1000)
SET @sqlCommand = 'SELECT * from yourtable'
EXEC (@sqlCommand)
你需要动态生成SQL内容:
declare @tablename varchar(50)
set @tablename = 'test'
declare @sql varchar(500)
set @sql = 'select * from ' + @tablename
exec (@sql)
Use:
CREATE PROCEDURE [dbo].[GetByName]
@TableName NVARCHAR(100)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @sSQL nvarchar(500);
SELECT @sSQL = N'SELECT * FROM' + QUOTENAME(@TableName);
EXEC sp_executesql @sSQL
END