我想根据SQL Server保存包含错误的存储过程。
这是程序代码:
Create PROCEDURE [Product].[JewelSearch]
@JewelItem bigint,
@JewelType nvarchar(50),
@JewelMate nvarchar(50)
AS
BEGIN
SET NOCOUNT ON;
SELECT *
FROM Product.@JewelType
WHERE Material = @JewelMate OR Item# = @JewelItem;
END
问题是我有一个Product
架构,我从主应用程序中获取表名并将其保存在@JewelType
中,并且在主应用程序的每次搜索中都必须更改表名每次他们在@JewelType
中都是一个不同的表名。
根据我的说法,查询是完美的,但SQL Server不允许我执行它并保存它。有没有办法可以强行保存这个存储过程?希望您理解我的问题,请尽可能帮助我。
答案 0 :(得分:2)
如果是SQL Server,那么这样的事情应该起作用
Create PROCEDURE [Product].[JewelSearch]
@JewelItem bigint,
@JewelType nvarchar(50),
@JewelMate nvarchar(50),
@SQL nvarchar(max)
AS BEGIN
SET NOCOUNT ON;
SET @SQL = 'Select * From Product.'+@JewelType+' where Material = '+@JewelMate+' OR Item# = '+CAST(@JewelItem as nvarchar(50))+'; '
EXEC(@SQL)
END
这是未经测试的,因为我在Mac上,但你明白了。
如果您打算使用它,请注意与SQL注入相关的动态SQL的危险。