2011-10-26 79 views
1
DECLARE @SQL1 VARCHAR(MAX) 
SET @SQL1='SELECT * FROM tblResponsibleEngineer WHERE ResponsibleEngineer='+CAST(@ResponsibleEngineer AS VARCHAR(500))+'' 
EXEC(@SQL1) 
IF @@ROWCOUNT>0 
BEGIN 
SET @Result='EXIST' 

由於我將參數@ResponsibleEngineer傳遞給查詢,上述查詢失敗執行。錯誤是"Invalid column name TEST"TEST是我作爲參數值傳遞的值 @ResponsibleEngineer並且表中沒有這樣的列作爲TEST。傳遞參數以插入查詢時出現錯誤?傳入參數以插入查詢

回答

3

您需要周圍的參數speach標記:

'SELECT * FROM tblResponsibleEngineer WHERE ResponsibleEngineer='''+CAST(@ResponsibleEngineer AS VARCHAR(500))+'''' 

否則你生成:

SELECT * FROM tblResponsibleEngineer WHERE ResponsibleEngineer=TEST' 

因此其尋找一個列TEST。通過在speach參數標誌着您正在生成:

SELECT * FROM tblResponsibleEngineer WHERE ResponsibleEngineer='TEST' 

這個查詢然後運行WHERE where子句中的列ResponsibleEngineer等於字符串值TEST

+2

+1這將工作,我的問題是「爲什麼不使用參數化查詢?」當我看到這個問題時。 –

0

您必須聲明@ResponsibleEngineer並將其值設置。它基本上用作變量。

DECLARE @ResponsibleEngineer varchar(10) 
SET @ResponsibleEngineer = 'my test' 
0

試試這個:

DECLARE @SQL1 VARCHAR(MAX) 
    SET @SQL1='SELECT * FROM tblResponsibleEngineer WHERE ResponsibleEngineer='''+CAST(@ResponsibleEngineer AS VARCHAR(500))+'''' 
    EXEC(@SQL1) 
    IF @@ROWCOUNT>0 
    BEGIN 
    SET @Result='EXIST' 
0

您的查詢翻譯成

SELECT * FROM tblResponsibleEngineer WHERE ResponsibleEngineer=TEST 

你需要得到:

SELECT * FROM tblResponsibleEngineer WHERE ResponsibleEngineer='TEST' 
0

在你選擇刪除空格。快速樣品

DECLARE cnt int 
SELECT cnt= count(*) FROM tblResponsibleEngineer WHERE ResponsibleEngineer='CAST(@ResponsibleEngineer AS VARCHAR(500))' 
IF cnt>0 
BEGIN 
    SET @Result='EXIST' 

希望這有助於。