我想从存储过程中的文本框中传递一个字符串,用于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'
答案 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