小编S M*_*S M的帖子

如何在存储过程中将表声明为参数

存储过程抛出错误

必须声明一个表变量

在存储过程中,我从调用该存储过程的 UI 中获取表名称。我不想在存储过程中创建表变量。如果有人有想法,我们将不胜感激。谢谢。

存储过程如下:

ALTER PROCEDURE [dbo].[usp_Rates_GET_CustomOFCLData]
    @returnOrigin VARCHAR(256),
    @returnDest   VARCHAR(256)
AS
BEGIN
    SET NOCOUNT ON;

    SELECT 
        *,
        'o' as LocationType   
    FROM 
        @returnOrigin

    UNION ALL

    SELECT 
        *,
        'd' as LocationType  
    FROM 
        @returnDest
END
Run Code Online (Sandbox Code Playgroud)

sql sql-server stored-procedures

3
推荐指数
1
解决办法
1万
查看次数

将运算符作为存储过程中的参数传递,同时防止 SQL 注入的风险

我有以下动态查询,并希望传递一个运算符作为参数,但出现错误

@ageOperator 附近的语法不正确

另外,我想防止任何SQL注入。我可以像下面那样进行串联,但它会导致 SQL 注入。

@sWhere = ' WHERE AGE1 ' + @ageOperator + ''' + @age + '''
Run Code Online (Sandbox Code Playgroud)

先感谢您!

DECLARE @age INT, 
        @ageOperator VARCHAR(10), 
        @sSQL NVARCHAR(MAX), 
        @sWhere NVARCHAR(MAX)

SET @age = 21
SET @ageOperator = ' = '

SET @sWhere = ' WHERE AGE1 @ageOperator @age '

SET @sSQL = ' SELECT * FROM WEBPM_COPY.DBO.Test1111 ' + @sWhere 

EXEC sp_executesql @sSQL, N'@age INT, @ageOperator char(10)', @age, @ageOperator;
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2014

0
推荐指数
1
解决办法
1199
查看次数