繁体   English   中英

使用 SQL Server 存储过程将列名与变量匹配

[英]Using SQL Server stored procedure to match column name to variable

更新。

我对存储过程进行了修改:

ALTER PROCEDURE [dbo].[Get_Labor_Rates_By_CompanyID]
--Get_Labor_Rates_By_CompanyID '5116' ,'FOREMAN-REGULAR TIME (8hr Day Monday-Friday)* (HR)'

@CompanyID bigint,
@Labor_Type nvarchar(200)

AS
BEGIN

Select COLUMN_NAME from 
[Emerald_Data].INFORMATION_SCHEMA.COLUMNS
Where TABLE_NAME= N'tbl_Client_List_Pricing' and 
COLUMN_NAME=@Labor_Type

Select * from tbl_Client_List_Pricing
where [CompanyNum]= @CompanyID

END

运行后,我从 select 语句中得到以下两个表: 在此处输入图片说明

我需要组合这两个语句,以便顶部 COLUMN_NAME 结果过滤第二个 Select 以仅显示该列及其客户端 Alston Construction 的数据。 顶部 COLUMN_NAME 也作为 COLUMN_NAME 存在于底部选择中

最终结果应如下所示:

Client                |   FOREMAN-REGULAR TIME(8hr Day Monday-Friday)* (HR)
----------------------------------------------------------------------------
Alston Construction   |   45

回答您的问题的当前版本(请不要再次更新):

您不需要先从表中自行SELECT列名,然后再尝试将其连接到您想要的查询中。 您的SELECT * FROM tbl_Client_List_Pricing已经包含列'FOREMAN-REGULAR TIME (8hr Day Monday-Friday)* (HR)' ,因此您可以使用动态 sql 来执行此操作:

例如:

DECLARE @sql NVARCHAR(MAX)

SET @sql = N'SELECT [Client], [' + @Labor_Type + ']' + '
FROM tbl_Client_List_Pricing
WHERE [CompanyNum] = @CompanyID'

--PRINT @sql

EXEC (@sql)

为您提供结果:

+---------------------+---------------------------------------------------+
|       Client        | FOREMAN-REGULAR TIME(8hr Day Monday-Friday)* (HR) |
+---------------------+---------------------------------------------------+
| Alston Construction |                      45                           |
+---------------------+---------------------------------------------------+

你原来的问题:

您问为什么在尝试执行这样的存储过程时会收到以下错误:

sp_Get_Labor_Rates_By_CompanyID '5204' 'STRAW WATTLE > 10000 LF-INSTALLED-Photo (LF)'

“STRAW WATTLE > 10000 LF-INSTALLED-Photo (LF)”附近的语法不正确


我的答案:

当您执行具有多个参数的存储过程时,请在参数之间使用逗号。


签出执行存储过程或函数

正如您将在那里看到的,您可以提供参数名称:

[ [ @parameter = ] { value   
                           | @variable [ OUTPUT ]   
                           | [ DEFAULT ]   
                           }  
        ] 

执行:

sp_Get_Labor_Rates_By_CompanyID @CompanyID = '5204', @Material_Type = 'STRAW WATTLE > 10000 LF-INSTALLED-Photo (LF)'`

或者

按照CREATE PROCEDURE语句中给出的顺序提供它们(在执行时):

[ ,...n ] 

sp_Get_Labor_Rates_By_CompanyID '5204', 'STRAW WATTLE > 10000 LF-INSTALLED-Photo (LF)'

如果以@parameter = value 的形式提供参数,则可以按任何顺序提供它们。 您还可以省略已提供默认值的参数。 如果以@parameter = value 的形式提供一个参数,则必须以这种方式提供所有后续参数。 如果不以@parameter = value 的形式提供参数,则必须按照CREATE PROCEDURE语句中给出的顺序提供它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM