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

问题描述 投票:2回答:1

更新。

我对商店程序进行了修改:

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语句中得到以下两个表:enter image description here

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

最终结果应如下所示:

Client                |   FOREMAN-REGULAR TIME(8hr Day Monday-Friday)* (HR)
----------------------------------------------------------------------------
Alston Construction   |   45
sql sql-server
1个回答
2
投票

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

您不需要首先从表中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)附近的语法不正确


我的答案:

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


看看Execute a stored procedure or function

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

[ [ @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语句中给出的顺序提供参数。

© www.soinside.com 2019 - 2024. All rights reserved.