我想制作一个表变量,我可以在 Microsoft sql server management studio 上制作它吗?

Posted

技术标签:

【中文标题】我想制作一个表变量,我可以在 Microsoft sql server management studio 上制作它吗?【英文标题】:I want to make a vairable of table can i make it on Microsoft sql server management studio? 【发布时间】:2018-10-12 07:55:47 【问题描述】:

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

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

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

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

我想要一个将表名作为变量的过程,所以当我选择下拉列表时,它会调用该表中的数据。 就像我想象的那样,它的作品可能是这样的......

[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)

我该怎么做????

【问题讨论】:

尝试用它的结构声明一个变量/临时表,就像创建一个新表一样。稍后您可以在该表中插入、查询。 【参考方案1】:

您可以构建动态 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 语句和使用的临时表,或多个存储过程中。

【讨论】:

【参考方案2】:

您需要构建动态查询,因为表名不能是变量。对于这种情况,您可以使用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 

【讨论】:

以上是关于我想制作一个表变量,我可以在 Microsoft sql server management studio 上制作它吗?的主要内容,如果未能解决你的问题,请参考以下文章

通过Microsoft Excel中的vlookup制作列表?

如何使用 PHP、SQL 和 Microsoft Access 将另一个表中的 select max 函数和用户输入的变量插入表中?

Microsoft Access 2013 - 表数据中的变量

利用Microsoft Query制作Excel数据透视表

请假提交表中的请假不按任何顺序维护。我想创建一个视图,我可以在其中针对员工制作每月向量

在 Microsoft Access 2010 数据宏中使用变量数据