首页 > 解决方案 > 从变量名中删除

问题描述

我想创建一个存储过程,其中有一个sourcetable输入参数,并且我想使用 delete 语句从与该源表值对应的目标表中删除行,例如:

Create proc spdeleteRows
    @sourcetable varchar(50)
As
Begin
    Declare @destname varchar(50)
    Select @destname = destname from tblConfig where sourcetable=@sourcetable
    Delete from @destname where convert(date,loaddate) =getdate();
End

我该怎么做?
它显示错误,@destname因为它被声明为 varchar 但我不能将它声明为表变量,因为我还必须定义它的结构以及它将是动态的。
请帮忙。

标签: sqlsql-server

解决方案


您将不得不使用动态 SQL。我对 做了一个小小的假设WHERE,但这很可能是你所追求的:

CREATE PROC dbo.spdeleteRows @SourceTable sysname AS --corrected spelling, changed to correct data type.
BEGIN

    DECLARE @DestName sysname = (SELECT destname FROM dbo.tblConfig WHERE sourcetable = @SourceTable);

    --changed WHERE, no column converted to a date will ever equal GETDATE(), as datetime has a high precedence than date.
    DECLARE @SQL nvarchar(MAX) = N'DELETE FROM dbo.' + QUOTENAME(@DestName) + N' WHERE loaddate >= CONVERT(date,GETDATE()) AND loaddate < DATEADD(DAY, 1, CONVERT(date,GETDATE()));'; 

    --PRINT @SQL;
    EXEC sys.sp_executesql @SQL;

END;

推荐阅读