我有这个存储过程:
CREATE procedure Sp_GetAllInventoryPivot
(@UserID int,
@clientID int,
@projectID int,
@productID int
)
as begin
declare @pivot varchar(max);
declare @sql varchar(max);
DECLARE @AttributeNameList nvarchar(max);
SET @AttributeNameList = N'';
if exists(select AttributeName FROM Attribute where ShowButton=1 and ProductID= @productID)
begin
SELECT @AttributeNameList += '[' + AttributeName + ']' + N','
FROM Attribute
WHERE ShowButton = 1 AND ProductID = @productID AND IsDeleted = 0;
SELECT @pivot = LEFT(@AttributeNameList,LEN(@AttributeNameList)-1);
print @Pivot
SELECT @sql = 'SELECT * FROM
(SELECT
w.WorkFlowTransId as WorkFlowTransID,
w.ProjectId,
w.ProductID,
w.ClientId,
isnull((SELECT top 1 DiscrepancyStatusCode
FROM [Descrepancy]
where WorkFlowTransId=w.WorkFlowTransId order by DiscrepancyStatusCode asc ),'''') as DiscrepancyCode,
Attribute.AttributeName,
AttributeValue.AttributeValueName,
isnull((SELECT count(WorkFlowValueID)
FROM WorkFlowValue wfv
where wfv.WorkFlowTransId=w.WorkFlowTransId and wfv.WorkFlowValueName=''''),'''') as Status
FROM Attribute
JOIN AttributeValue ON Attribute.AttributeID = AttributeValue.AttributeID
JOIN dbo.WorkFlowTransaction w on w.WorkFlowTransId=AttributeValue.WorkFlowTransId
where isnull(w.IsDeleted,0)=0 and isnull(Attribute.IsDeleted,0)=0) as s
pivot( MIN(AttributeValueName) for AttributeName in ('+')) as p
where p.ProductId='+Convert(varchar,@productID)+'
and p.ClientId='+Convert(varchar,@clientID)+'
and p.ProjectId='+Convert(varchar,@projectID)+'
'
exec(@sql);
end
end
我想在SQL Server本身中使用productID = 2
等硬编码值执行此查询,我不想要声明。如果我只需要@sql
,其中所有值必须在没有声明的情况下给出
我希望看到SQL Server本身的值。我需要怎么做?我对SQL Server很新。请通过提供解决方案来帮助我。
答案 0 :(得分:0)
假设您的存储过程已成功创建,您可以这样调用它:
EXEC Sp_GetAllInventoryPivot @UserId = 1, @ClientId = 2, @projectID = 2, @productID = 2;
EXEC
关键字用于执行命令,在本例中是您的存储过程。然后,您可以指定参数及其值。参数名称是可选的,因此您也可以这样做:
EXEC Sp_GetAllInventoryPivot 1,2,2,2;
编辑:假设您的问题是关于使用所谓的默认'运行存储过程。即使没有指定任何参数,它也可以运行,你可以像这样初始化参数:
CREATE procedure Sp_GetAllInventoryPivot
@UserID int = 1,
@clientID int = 2,
@projectID int = 2,
@productID int = 2
现在您只需调用该过程而无需指定参数值。
答案 1 :(得分:0)
在新的查询窗口中,通过将值传递给存储过程参数
来使用EXEC命令例如
EXEC Sp_GetAllInventoryPivot 10,2,4,50
显示为以下参数提供值时的结果
@UserID =10
@clientID=2
@projectID=4
@productID=50
答案 2 :(得分:0)
您可以直接致电SP:
exec Sp_GetAllInventoryPivot 1, 1, 2, 1
或者,即使没有exec它也能正常工作:
Sp_GetAllInventoryPivot 1, 1, 2, 1
或者,出于测试目的,您可以注释掉创建过程部分并自己声明变量:
--CREATE procedure Sp_GetAllInventoryPivot
--(
--@UserID int,
--@clientID int,
--@projectID int,
--@productID int
--)
--as begin
DECLARE @UserID int
DECLARE @clientId int
DECLARE @projectID int
DECLARE @productID int
SET @UserID = 1
SET @clientId = 1
SET @projectID = 2
SET @productId = 1
如果这样做,请不要忘记在最后注释END
,当切换回SP创建时,取消注释原始行并注释这八行。