我試圖使用存儲過程創建一個已過濾索引。但是,當代碼寫入存儲過程時沒有錯誤顯示,但是當我運行查詢時,它無法檢測到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