使用存储过程参数到 return 列
Using stored procedure parameters to return columns
我正在尝试编写一个存储过程,它将 return 基于两个输入参数的特定值。问题是试图使其中一个参数引用一列。
这是我的 table:
CityID CityName London Paris
----------- -------------------- --------------------------------------- --
1 London 0 60
2 Paris 50 0
3 Berlin 90 60
4 Madrid 150 90
5 Dublin 30 80
6 Rome 75 88
是否可以按照以下方式编写存储过程:
CREATE PROCEDURE Price (@city1, @city2)
AS
SELECT @city2
FROM dbo.MyTable
WHERE CityName = @city1
您将不得不使用动态 sql。
CREATE PROC Price (@City1, @City2)
AS
BEGIN
DECLARE @Sql NVARCHAR(MAX)
SET @Sql = 'SELECT ' + @City2 + ' FROM dbo.MyTable WHERE CityName = ''' +
@City1 + ''''
EXEC sp_execute @Sql
END
创建过程 [dbo].[USP_Price]
@city1 变量,
----------------------------------------------
@City2 VARCHAR(MAX) = NULL OUT
作为
开始
SELECT @city2
FROM dbo.MyTable
WHERE CityName = @city1
结束
--- 创建存储过程,如果您使用的是 sql 服务器,
右键单击存储过程并单击执行存储过程
输入 city1 值,而城市 2 的 select 为空
并执行
我会做这样的事情,在尝试 运行 动态 SQL 语句之前验证列名的存在:
create procedure dbo.GetPrice(@city nvarchar(50), @column nvarchar(200)) as
begin
if (not exists (select *
from sys.columns
where object_id = object_id('dbo.MyTable') and name = @column))
return;
else begin
declare @sql nvarchar(max) =
'SELECT [' + @column + '] FROM dbo.MyTable WHERE CityName = ''' + @city + '''';
execute sp_ExecuteSQL @sql;
end;
end;
我正在尝试编写一个存储过程,它将 return 基于两个输入参数的特定值。问题是试图使其中一个参数引用一列。
这是我的 table:
CityID CityName London Paris
----------- -------------------- --------------------------------------- --
1 London 0 60
2 Paris 50 0
3 Berlin 90 60
4 Madrid 150 90
5 Dublin 30 80
6 Rome 75 88
是否可以按照以下方式编写存储过程:
CREATE PROCEDURE Price (@city1, @city2)
AS
SELECT @city2
FROM dbo.MyTable
WHERE CityName = @city1
您将不得不使用动态 sql。
CREATE PROC Price (@City1, @City2)
AS
BEGIN
DECLARE @Sql NVARCHAR(MAX)
SET @Sql = 'SELECT ' + @City2 + ' FROM dbo.MyTable WHERE CityName = ''' +
@City1 + ''''
EXEC sp_execute @Sql
END
创建过程 [dbo].[USP_Price] @city1 变量, ---------------------------------------------- @City2 VARCHAR(MAX) = NULL OUT
作为 开始
SELECT @city2
FROM dbo.MyTable
WHERE CityName = @city1
结束
--- 创建存储过程,如果您使用的是 sql 服务器, 右键单击存储过程并单击执行存储过程 输入 city1 值,而城市 2 的 select 为空 并执行
我会做这样的事情,在尝试 运行 动态 SQL 语句之前验证列名的存在:
create procedure dbo.GetPrice(@city nvarchar(50), @column nvarchar(200)) as
begin
if (not exists (select *
from sys.columns
where object_id = object_id('dbo.MyTable') and name = @column))
return;
else begin
declare @sql nvarchar(max) =
'SELECT [' + @column + '] FROM dbo.MyTable WHERE CityName = ''' + @city + '''';
execute sp_ExecuteSQL @sql;
end;
end;