如何保存包含SQL Server错误的存储过程?

时间:2015-06-25 21:22:36

标签: sql-server stored-procedures

我想根据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不允许我执行它并保存它。有没有办法可以强行保存这个存储过程?希望您理解我的问题,请尽可能帮助我。

1 个答案:

答案 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的危险。

SQL Injection with Dynamic SQL - MSDN