我想制作 table 的变量 我可以在 Microsoft sql 服务器管理工​​作室上制作它吗?

I want to make a vairable of table can i make it on Microsoft sql server management studio?

我想在存储过程中创建一个 table 的变量来调用来自 3 个不同 table 的数据,例如 我在文本框中有城市名称和一个下拉列表,其中的值是 tablenames,

我已经做了一个存储过程:

[dbo].[sp_Search]
@City nvarchar(50) = null
AS
SELECT * FROM PropertyForSale_TBL  WHERE (City =    @City OR @City IS NULL)

这里是仅用于文本框的 SP,不用于下拉列表。

我想要一个将 table 名称作为变量的过程,因此当我 select 下拉列表时,它会调用 table 中的数据。 就像我想象的那样它的作品可能......

[dbo].[sp_Search]
@City nvarchar(50) = null,
@Tablename Table (maybe or maybe not i dont know it is not working)

AS
SELECT * FROM @Tablename  WHERE (City = @City OR @City IS NULL)

我该怎么做?????

您可以构建动态 SQL 并执行它

这是一个简单的例子(注意有多种方法可以执行动态 SQL 并且每种方法都有自己的优点和缺点,做一点研究)

DECLARE @City       NVARCHAR(50) = 'New York'
      , @TableName  VARCHAR(100) = 'PropertyForSale_TBL'


DECLARE @SQL NVARCHAR(MAX) = 
    'SELECT * FROM ' + QUOTENAME(@Tablename) + ' WHERE [City] = ''' + @City + ''''

PRINT @SQL -- SELECT * FROM [PropertyForSale_TBL] WHERE [City] = 'New York'

EXEC (@SQL)

编辑:另外,仅注释动态代码通常不是最好的主意。以上内容使您自己面临 SQL 注射和其他令人头疼的问题。查看您的数据库结构,看看数据是否可以放在相同的表、IF 语句和使用的临时表或多个存储过程中。

您需要构建动态查询,因为 table 名称不能是变量。对于这种情况,您可以使用 sp_executesql 到 运行 动态查询,如下所示。

您可以使用 sp_executesql 使其参数化查询以避免任何 SQL 注入威胁。

create procedure [dbo].[sp_search] 
   @City      nvarchar(50) = null, 
   @Tablename varchar(100) 
as 
  begin 
      declare @sql nvarchar(max)
      set @sql = N'SELECT * FROM ' +  quotename(@Tablename) 
             + '  WHERE (City = @City OR @City IS NULL)' 
      exec sp_executesql 
        @sql, 
        N'@City nvarchar(50)',       
        @City 
  end