[英]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
我需要组合这两个语句,以便顶部 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.