[英]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.