Zoe*_*Zoe 1 sql-server stored-procedures
我正在尝试编写一个存储过程,它采用两个参数来从客户表中检索一些数据。
下面是存储过程,它不检索任何数据,但是当我只需键入选择查询时,它就可以工作。
有人可以帮我看看问题出在哪里吗?
CREATE PROCEDURE [dbo].[RecordsByColumnSearch]
@field VARCHAR(50),
@search VARCHAR(50)
AS
SELECT *
FROM Customers
WHERE @field = @search
Run Code Online (Sandbox Code Playgroud)
像这样执行这个存储过程:
EXEC dbo.RecordsByColumnSearch @field = CustomerID, @search = ALFKI;
Run Code Online (Sandbox Code Playgroud)
不返回任何数据,而运行此查询时会:
SELECT *
FROM customers
WHERE CustomerID = 'ALFKI';
Run Code Online (Sandbox Code Playgroud)
先感谢您 !
您无法使用常规 SQL 执行您想要的操作。您需要动态 SQL。我会推荐:
CREATE PROCEDURE [dbo].[RecordsByColumnSearch] (
@field Varchar(50),
@search Varchar(50)
) AS
BEGIN
DECLARE @sql NVARCHAR(MAX);
SET @sql = '
select c.*
from Customers c
Where @field = @search
';
SET @sql = REPLACE(@sql, '@field', @field);
EXEC sp_executesql @sql, N'@field nvarchar(50)', @search=@search;
END;
Run Code Online (Sandbox Code Playgroud)
sp_executesql执行 SQL 语句并允许您传入参数。这是传递参数的最佳方式。不幸的是,这不适用于列名,因此仍然需要通过修改查询字符串来传递它们。
| 归档时间: |
|
| 查看次数: |
12948 次 |
| 最近记录: |