我试图使用存储过程创建一个已过滤索引。但是,当代码写入存储过程时没有错误显示,但是当我运行查询时,它无法检测到FirstName参数。如何在存储过程中创建过滤索引(SQL Server)
名字从BorrowerPersonal表
CardNumber从BorrowerCard表
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[BorrowerCardG11Match]
@CardNo VARCHAR(20),
@FirstName VARCHAR(30)
AS
BEGIN
DECLARE @SQL NVARCHAR(Max)
SET @CardNo = 17522
SET @FirstName = 'Simon'
SET @SQL = N'SELECT dbo.BorrowerCard.BorrowerCardID
FROM dbo.BorrowerCard
INNER JOIN dbo.BorrowerPersonal
ON dbo.BorrowerPersonal.BorrowerPersonalID = BorrowerCard.BorrowerPersonalID
WHERE CardNumber =' + CAST(@CardNo AS VARCHAR(20))
SET @SQL += 'AND NameFirst = ' + CAST(@FirstName AS VARCHAR(30))
EXECUTE sys.sp_executesql @SQL
END
这似乎并不具有任何与创建过滤索引... – 2015-03-02 12:26:15
有一些理由使用动态SQL,这不是在这个问题吗?因为这是您应该使用静态SQL的场景的主要示例。正如所写的,这个过程是一个等待发生的SQL注入攻击。 – Allan 2015-03-02 12:28:53
如果您提出包含代码的问题:请不要更改代码,否则答案将无效。 (你只是试着编辑一个答案,所以这段代码适用于你的新问题,这不是这样做的,只是不要改变你的问题!) – knedlsepp 2015-03-02 14:39:53