更新。
我对商店程序进行了修改:
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结果过滤第二个选择以仅显示该列及其客户端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)附近的语法不正确
我的答案:
当您使用多个参数执行存储过程时,请在参数之间使用逗号。
看看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
语句中给出的顺序提供参数。