【问题标题】:Stored Procedure not working with variables存储过程不适用于变量
【发布时间】:2021-05-24 21:40:16
【问题描述】:

我有一个存储过程如下:

CREATE Procedure [dbo].[GetDrugPackID]
    @Search as nvarchar
As
Begin
    SELECT DrgPack.ID, DrgPack.PackSize, Drg.BrandName, Drg.DIN, Drg.Strength
  FROM [Pharmacy].[dbo].[DrgPack] INNER JOIN
  Drg ON Drg.ID = DrgPack.DrgID INNER JOIN
  DrgPackUPc ON DrgPack.ID = DrgPackUpc.DrgPackId
  WHERE DrgPackUpc.Upc = '@Search'
End

当我通过将搜索变量传递为 04029125070527 来运行上述操作时,我没有得到任何结果。

但是,如果我按如下方式编辑我的存储过程,我会得到一个结果。唯一的区别是在上面我试图发送变量,而在第二个中它是硬编码的(不是我想要做的,只是试图调试)。

CREATE Procedure [dbo].[GetDrugPackID]
    @Search as nvarchar
As
Begin
    SELECT DrgPack.ID, DrgPack.PackSize, Drg.BrandName, Drg.DIN, Drg.Strength
  FROM [Pharmacy].[dbo].[DrgPack] INNER JOIN
  Drg ON Drg.ID = DrgPack.DrgID INNER JOIN
  DrgPackUPc ON DrgPack.ID = DrgPackUpc.DrgPackId
  WHERE DrgPackUpc.Upc = '04029125070527'

我在这里做错了什么?

【问题讨论】:

  • 你忘了设置你的 var "@Search as nvarchar" 的长度,它需要是 "@Search as nvarchar(50)" 或者你需要的任何长度
  • @Search 的数据类型应该与 DrgPackUpc.Upc 完全匹配。所以如果那是varchar(20),那么你应该使用它而不是nvarchar(50)

标签: sql sql-server tsql stored-procedures


【解决方案1】:

您需要声明nvarchar 参数的大小。如果没有大小声明,您的参数将隐式声明为 nvarchar(1)

另外,你的参数不能用单引号。

WHERE DrgPackUpc.Upc = @Search

【讨论】:

  • 谢谢!!就是这样,我错过了这两个
  • 如果解决了您的问题,请标记为答案。
  • 会做,我需要等待10分钟才能选择已解决。
猜你喜欢
  • 2016-10-22
  • 2011-01-23
  • 1970-01-01
  • 2015-11-11
  • 2021-09-04
  • 2011-09-16
  • 1970-01-01
  • 2018-05-21
  • 1970-01-01
相关资源
最近更新 更多