如何在 SQL 服务器中保存包含错误的存储过程?

How can I save a stored procedure which contains errors in SQL Server?

我想根据 SQL 服务器保存包含错误的存储过程。

这是程序代码:

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 架构,我从我的主应用程序中获取 table 名称并将其保存在 @JewelType 和主应用程序中的每次搜索中table 名称必须更改,并且每次它们在 @JewelType 中都会是不同的 table 名称。

根据我的说法,查询是完美的,但 SQL 服务器不允许我执行它并保存它。有什么办法可以强制保存这个存储过程吗?希望你能理解我的问题,如果可能请帮助我。

如果是 SQL 服务器,像这样的东西应该可以工作

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 注入相关的危险。

SQL Injection with Dynamic SQL - MSDN