将字符串传递给存储过程中的WHERE子句

时间:2017-12-07 03:11:15

标签: c# sql-server stored-procedures

我想从存储过程中的文本框中传递一个字符串,用于WHERE子句,基本上我想做的就是这个。

SELECT * 
FROM TABLE 
WHERE "Textbox1.text" = '1234'

(文本框值将是列名(例如'ID')

如何在存储过程中执行此操作?

这是我到目前为止所做的,它没有返回值

ALTER PROCEDURE ORProc
    @SEARCH_PARAMETER VARCHAR(100) = NULL,
    @OR_NUMBER VARCHAR(20) = NULL,
    @CLIENT_NAME VARCHAR(100) = NULL,
    @OR_DATE VARCHAR(10) = NULL
AS
BEGIN
    SET NOCOUNT ON;

    SELECT * 
    FROM OR_HEADER 
    WHERE '%'+ @SEARCH_PARAMETER + '%' = @OR_NUMBER 
       OR '%'+ @SEARCH_PARAMETER + '%' = @OR_DATE 
       OR '%'+ @SEARCH_PARAMETER + '%' = @CLIENT_NAME
 END;

 EXEC ORProc @SEARCH_PARAMETER = 'OR_NUMBER',
             @OR_NUMBER = '23232'

1 个答案:

答案 0 :(得分:0)

尝试下一个查询

SELECT * 
FROM OR_HEADER 
WHERE (@SEARCH_PARAMETER='OR_NUMBER' AND OR_NUMBER=@OR_NUMBER)
  OR (@SEARCH_PARAMETER='OR_DATE' AND OR_DATE=@OR_DATE)
  OR (@SEARCH_PARAMETER='CLIENT_NAME' AND CLIENT_NAME=@CLIENT_NAME)

我认为您可以将@OR_DATE VARCHAR(10) = NULL替换为@OR_DATE DATE = NULL@OR_DATE DATETIME = NULL

我认为您可以将三个值参数替换为一个@SEARCH_VALUE

ALTER PROCEDURE ORProc
    @SEARCH_PARAMETER VARCHAR(100) = NULL,
    @SEARCH_VALUE VARCHAR(100) = NULL
AS
BEGIN
    SET NOCOUNT ON;

    IF(ISNULL(@SEARCH_PARAMETER,'') NOT IN('','ID','OR_NUMBER','OR_DATE','CLIENT_NAME'))
    BEGIN
      PRINT 'You sent the wrong parameter!'
      RETURN
    END

    SELECT * 
    FROM OR_HEADER 
    WHERE (@SEARCH_PARAMETER='OR_NUMBER' AND OR_NUMBER=@SEARCH_VALUE)
      OR (@SEARCH_PARAMETER='OR_DATE' AND OR_DATE=CAST(@SEARCH_VALUE AS date))
      OR (@SEARCH_PARAMETER='CLIENT_NAME' AND CLIENT_NAME=@SEARCH_VALUE)
      OR (@SEARCH_PARAMETER='ID' AND ID=CAST(@SEARCH_VALUE AS int))
      OR ISNULL(@SEARCH_PARAMETER,'')=''

END
相关问题