tsql - 如何对存储过程中的参数进行评估?
问题描述
我需要执行以下存储过程,其中@Table_temp
应该连接@Table
和temp
。那么我如何正确参数化呢?
CREATE PROCEDURE [dbo].[swap_Collect]
@Table varchar,
@UniqueColumn varchar
AS
BEGIN
IF (OBJECT_ID(@Table) IS NOT NULL )
BEGIN
DECLARE @Table_temp as varchar
SET @Table_temp= @Table + '_temp'
DELETE FROM @Table where @UniqueColumn in (Select @UniqueColumn from @Table_temp)
INSERT INTO @Table SELECT * from PRODUCTS_temp
SELECT 1
END
ELSE
BEGIN
SELECT * INTO @Table from Collects_temp
SELECT 1
END
END
解决方案
ALTER PROCEDURE [dbo].swap_Collect(
@Table as varchar(MAX),
@UniqueColumn as varchar(MAX))
AS
BEGIN
IF (OBJECT_ID(@Table) IS NOT NULL )
BEGIN
DECLARE @query nvarchar(MAX)
set @query = 'DELETE FROM '+ @Table + ' where ' + @UniqueColumn + ' in (Select ' + @UniqueColumn + ' from ' + @Table + '_temp)'
set @query = @query + 'INSERT INTO ' + @Table + ' SELECT * from ' + @Table + '_temp'
EXEC sp_executesql @query
SELECT 1
END
ELSE
BEGIN
set @query = 'SELECT * INTO ' + @Table + ' from ' + @Table + '_temp'
print @query
EXEC sp_executesql @query
SELECT 1
END
END
推荐阅读
- node.js - 在 Heroku 上启动浏览器进程失败
- javascript - 如何完美地验证电子邮件地址?
- c - 如果按位或运算符在两个数字之间使用两次。这将如何运作?
- linux - 有什么方法可以在我的云虚拟机中设置一个 .bin 文件,以便在每次崩溃时重新启动我的服务器?
- cytoscape - 旧版 Cytoscape 属性格式未导入
- excel - 即使我关闭了显示警报,workbook.close 也会提示“想要保存”对话框
- python - 第一次猜测,即使我做对了,也没有任何东西被注册
- python - Python FuzzyWuzzy 比率:它是如何工作的?
- php - 如何在具有相同 ID 的列中选择不同的值然后删除它们 PHP SQL Server
- javascript - 如何将参数从纯javascript文件发送到html文件