1
我在嘗試創建相當簡單的動態SQL查詢時遇到了問題。當我PRINT @SQLString時,變量不顯示它們包含的值。有任何想法嗎?編寫動態SQL查詢
ALTER PROCEDURE [dbo].[usp_ItemSearch]
@ItemNum varchar(30) = NULL
,@SearchFilter int
,@VendorNum varchar(10) = NULL
,@RecUserID int = NULL
,@StartDate smalldatetime = NULL
,@EndDate smalldatetime = NULL
AS
DECLARE @SQLString as varchar(1000)
SET @SQLString = 'SELECT RecID, VendorNum, VendorName, PORelNum, InvoiceNum, ItemNum, RecAddDate, LastUpdated FROM tbl_Processor_ItemDscLog'
IF @ItemNum IS NOT NULL
BEGIN
IF @SearchFilter = 2
BEGIN
SET @SQLString = @SQLString + ' WHERE ItemNum LIKE ''%' + @ItemNum + '''' --Ends with
END
IF @SearchFilter = 1
BEGIN
SET @SQLString = @SQLString + ' WHERE ItemNum LIKE ''%' + @ItemNum + '%''' --Contains
END
IF @SearchFilter = 0
BEGIN
SET @SQLString = @SQLString + ' WHERE ItemNum LIKE ''' + @ItemNum + '%''' --Starts with
END
END
IF @VendorNum IS NOT NULL
BEGIN
SET @SQLString = @SQLString + ' WHERE VendorNum = ''' + @VendorNum + ''''
END
IF @RecSearchUserID IS NOT NULL
BEGIN
SET @SQLString = @SQLString + ' AND (RecAddUserID = @RecUserID)'
END
IF (@EndDate IS NOT NULL)
BEGIN
IF (@StartDate IS NOT NULL)
BEGIN
SET @SQLString = @SQLString + ' WHERE RecAddDate between @StartDate AND @EndDate '
END
ELSE
BEGIN
SET @SQLString = @SQLString + ' RecAddDate BETWEEN 01/01/1996 AND @EndDate + '
END
END
SET @SQLString = @SQLString + ' ORDER BY ItemNum, VendorNum'
PRINT @SQLString
您的'PRINT @ SQLString'在存儲過程中嗎? (我看不到它) – 2010-06-23 03:01:02
是的。我剛編輯了代碼。感謝那。 – Frank 2010-06-23 03:03:49
爲什麼要避免在T-SQL中執行動態SQL有充分的理由。例如,如果'@ ItemNum'是'O'Malley',會發生什麼?一般來說,不要這樣做動態SQL。作爲參數化查詢在中間層組件中執行。 – Thomas 2010-06-23 03:04:15