如何在sql中使表动态化

时间:2010-07-28 05:34:05

标签: sql tsql

有没有人知道如何在存储过程中编写脚本以根据变量运行表(或者可以这样做吗?)?

例如: 我有3个表名称为customer,supplier和support

当用户输入1,然后运行表客户,2表供应商和3表支持

declare @input int;

if @input =1
begin
declare @table varchar(50); set @table = 'customer'
end

if @input =2
begin
declare @table varchar(50); set @table = 'supplier '
end

if @input =3
begin
declare @table varchar(50); set @table = 'support'
end 

select *
INTO ##test
from  @table

3 个答案:

答案 0 :(得分:1)

如果真的那么简单,为什么不重复选择?

if @input =1
begin
Select * INTO ##test From customer
end

if @input =2
begin
Select * INTO ##test From supplier
end

if @input =3
begin
Select * INTO ##test From support
end

答案 1 :(得分:0)

是的,您可以使用动态sql“EXEC”或“Sp_Executesql”命令来完成。

示例:

USE Northwind
GO


CREATE TABLE #MyTemp
   (  RowID    int  IDENTITY,
      LastName varchar(20)
   )

DECLARE @SQL nvarchar(250)
SET @SQL = 'INSERT INTO #MyTemp SELECT LastName FROM Employees;'
EXECUTE sp_executesql @SQL

答案 2 :(得分:0)

你为什么要这样做?乍一看似乎是一个坏主意。

您可以发布存储过程正在执行的操作以及任何相关表吗?我怀疑你可以:

  1. 以这种方式修改架构 那你不再做了 此
  2. 创建不同的存储过程 在每张桌子上做你想做的事,而不是强迫它进入一个过程。
  3. 使用您应该注意的动态SQL时会出现几个问题。 Here是一篇关于利弊的相当全面的文章。