sql - 从变量名中删除
问题描述
我想创建一个存储过程,其中有一个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 但我不能将它声明为表变量,因为我还必须定义它的结构以及它将是动态的。
请帮忙。
解决方案
您将不得不使用动态 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;
推荐阅读
- r - 通过 R 中每个组的加权平均值聚合数据
- reactjs - 如何在 onPress 事件中启用 React Native 中的热点?
- string - 如何按字符串长度对猫鼬中的结果进行排序?
- javascript - 表大小减小后表数据溢出
- apache-kafka - 我可以在kafka avro生产者中只指定模式ID吗
- python-3.x - 如何在滑索中订购一小部分加密货币(如比特币)?
- arrays - Bash 数组未正确排序
- amazon-web-services - 是否需要做一些事情才能让 chrome window.navigator.serial `requestPort` 在 AWS S3 上的生产环境中工作?
- java - 块序列代码战 kata
- vue.js - 有没有办法修复 Ionic Vue 输入 v-model?