簡體   English   中英

存儲過程:將表名稱轉換為表變量

[英]Stored Procedure: turn Table name into Table Variable

有很多類似的問題,但是我沒有找到我想要的東西。 由於在存儲過程中使用動態SQL會很快變得麻煩,因此我想將表名(Varchar)傳遞給存儲過程,將該表名轉換為Tablevariable,然后在其余過程中使用此Tablevariable。 我不知道這個代碼。

我正在SQL Server 2008R2的SSMS中工作。 目前,我的代碼與此類似。 我落后於中間部分,從@TableName Varchar變量創建@Table Table變量

CREATE Procedure [dbo].StoredProc(@Tablename Varchar)
AS
Begin
Declare @Table Table (ColA Varchar, ColB Float)
Declare @result float

-- Something like Insert @Table Select * From @Tablename using Dynamic sql or sth. similar

Select @result = Select sum(ColB) From @Table
End

您應該在變量中設置您需要的語句:

 SET @sqlString='INSERT ' + @Table + ' SELECT * FROM ' + @Tablename

使用動態SQL或其他。 類似”

然后執行它:

 EXEC sp_executesql @sqlString 

您可以通過以下方式組合動態SQL和臨時表存儲:

CREATE Procedure [dbo].StoredProc(@Tablename Varchar(100))
    AS
    Begin
    create table #TempTbl (ColA Varchar(100), ColB Float);
    Declare @result float

    declare @dynSQL varchar(max);
    select @dynSQL = 'insert into #TempTbl select 
      cast(val1 as varchar(100)) as ColA, 
      cast(val2 as float) as ColB from ' + COALESCE( @Tablename, 'NULL');
    -- Tablename should contain schema name, 'dbo.' for example
    exec( @dynSQL );
    Select @result = sum(ColB) From #TempTbl
    drop table #TempTbl;
    return @Result;
    End
USE AdventureWorks2012;

DECLARE @TableName NVARCHAR(MAX);

DECLARE @Copy TABLE
(
    [ShiftID] [tinyint] NOT NULL,
    [Name] [dbo].[Name] NOT NULL,
    [StartTime] [time](7) NOT NULL,
    [EndTime] [time](7) NOT NULL,
    [ModifiedDate] [datetime] NOT NULL
);

SET @TableName = N'[HumanResources].[Shift]';

INSERT INTO @Copy
EXEC ('SELECT * FROM ' + @TableName);

SELECT * FROM @Copy;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM