Sql server sql server中select语句中的表名变量

Sql server sql server中select语句中的表名变量,sql-server,select,stored-procedures,input-parameters,Sql Server,Select,Stored Procedures,Input Parameters,我想在select语句中使用tablename变量,但它给出了一个错误 -必须声明表变量“@table” 这是我的代码的快照您需要为此使用动态sql: alter PROCEDURE testTblName ( @id int, @name varchar(50) ) AS BEGIN declare @table varchar(50) declare @add varchar(150) set @table = 'DBTest..testMaster' DECLARE

我想在select语句中使用tablename变量,但它给出了一个错误

-必须声明表变量“@table”


这是我的代码的快照

您需要为此使用动态sql:

alter PROCEDURE testTblName
(
@id int,
@name varchar(50)
)
AS
BEGIN
   declare @table varchar(50)
   declare @add varchar(150)
   set @table = 'DBTest..testMaster'
   DECLARE @sql NVARCHAR(MAX)
   SELECT @sql = 'select @add = address from ' + @table + ' where id= ' + @id + ' and name= ' + @name
   EXEC sp_executesql @sql

END

您需要为此使用动态sql:

alter PROCEDURE testTblName
(
@id int,
@name varchar(50)
)
AS
BEGIN
   declare @table varchar(50)
   declare @add varchar(150)
   set @table = 'DBTest..testMaster'
   DECLARE @sql NVARCHAR(MAX)
   SELECT @sql = 'select @add = address from ' + @table + ' where id= ' + @id + ' and name= ' + @name
   EXEC sp_executesql @sql

END

我想,你必须做出这样的贡献

alter PROCEDURE testTblName
(
@id int,
@name varchar(50)
)
AS
BEGIN
    declare @table varchar(50)
    declare @add varchar(Max)
    set @table = 'DBTest..testMaster'

    Set  @add = 'Select address from ' + @table + ' where id = ' + CAST(@id AS VARCHAR(10)) + ' and name = ' + @name

    Exec(@add)
END

我想,你必须做出这样的贡献

alter PROCEDURE testTblName
(
@id int,
@name varchar(50)
)
AS
BEGIN
    declare @table varchar(50)
    declare @add varchar(Max)
    set @table = 'DBTest..testMaster'

    Set  @add = 'Select address from ' + @table + ' where id = ' + CAST(@id AS VARCHAR(10)) + ' and name = ' + @name

    Exec(@add)
END

不能将变量用作表名。当您从@table选择地址时,SQL希望
@table
是表类型的变量,而不是标量

您希望执行以下操作:

ALTER PROCEDURE testTblName
(
    @id INT,
    @name VARCHAR(50)
)
AS
BEGIN
    DECLARE @table VARCHAR(50),
            @add VARCHAR(150),
            @params VARCHAR(200),
            @sql VARCHAR(200);

    SET @params = '@add VARCHAR(50) OUTPUT';

    SET @table = 'DBTest..testMaster'

    SET @sql = 'SELECT @add = address FROM ' + @table + ' WHERE id=' + @id + ' AND name=' + @name

    EXEC sp_executesql @sql, @params, @add OUTPUT;

    ...
    ...
END

不能将变量用作表名。当您从@table选择地址时,SQL希望
@table
是表类型的变量,而不是标量

您希望执行以下操作:

ALTER PROCEDURE testTblName
(
    @id INT,
    @name VARCHAR(50)
)
AS
BEGIN
    DECLARE @table VARCHAR(50),
            @add VARCHAR(150),
            @params VARCHAR(200),
            @sql VARCHAR(200);

    SET @params = '@add VARCHAR(50) OUTPUT';

    SET @table = 'DBTest..testMaster'

    SET @sql = 'SELECT @add = address FROM ' + @table + ' WHERE id=' + @id + ' AND name=' + @name

    EXEC sp_executesql @sql, @params, @add OUTPUT;

    ...
    ...
END

您正在尝试创建表变量吗?您不能将变量用于这样的表名,这仅在动态SQL中可能,因为该变量不能用于替代对象名或关键字。您正在尝试创建表变量吗?您不能将变量用于这样的表名,只有在动态SQL中才有可能,因为变量不能代替对象名或关键字。感谢@Radu的帮助感谢@Radu的帮助