【问题标题】:Is it possible to take the parameter value dynamically from the database in MSSQL stored procedures?是否可以在 MSSQL 存储过程中从数据库中动态获取参数值?
【发布时间】:2018-12-28 05:39:25
【问题描述】:

当我通过条形码扫描仪扫描车辆的条形码时,我想显示车辆的所有属性。每辆车的条形码条目都存储在 Microsoft SQL 数据库中。是否可以为此编写程序?如果是的话,请给我一些想法。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[vq_proc]
@Vehicle_id varchar(50),
@L1_Employee varchar(50) output,
@L2_Employee varchar(50) output,
@L3_Employee varchar(50) output,
@L4_Employee varchar(50) output,
@R1_Employee varchar(50) output,
@R2_Employee varchar(50) output,
@R3_Employee varchar(50) output,
@AF_Date varchar(50) output,
@AF_Time varchar(50) output,
@LWR varchar(50) output,
@Noise varchar(50) output,
@LWL varchar(50) output,
@Elec varchar(50) output

AS
BEGIN

  --L1 employee
  Select @L1_Employee= emp.Employee_name From log_Station s1,HVQ_Employee emp where s1.station_code='L1' and s1.Employee_id=emp.Employee_id and s1.Vehicle_id= @Vehicle_id
  --L2
  Select @L2_Employee= emp.Employee_name From log_Station s1,HVQ_Employee emp where s1.station_code='L2' and s1.Employee_id=emp.Employee_id and s1.Vehicle_id= @Vehicle_id
  --L3
  Select @L3_Employee= emp.Employee_name From log_Station s1,HVQ_Employee emp where s1.station_code='L3' and s1.Employee_id=emp.Employee_id and s1.Vehicle_id= @Vehicle_id
  --L4
  Select @L4_Employee= emp.Employee_name From log_Station s1,HVQ_Employee emp where s1.station_code='L4' and s1.Employee_id=emp.Employee_id and s1.Vehicle_id= @Vehicle_id

  --R1
  select @R1_Employee= emp.Employee_name from log_Station s1,HVQ_Employee emp where s1.station_code='R1' and s1.Employee_id=emp.Employee_id and s1.Vehicle_id= @Vehicle_id
  --R2
   select @R2_Employee= emp.Employee_name from log_Station s1,HVQ_Employee emp where s1.station_code='R2' and s1.Employee_id=emp.Employee_id and s1.Vehicle_id= @Vehicle_id
  --R3
  Select @R3_Employee= Employee_name From log_Station s1,HVQ_Employee emp where s1.station_code='R3' and s1.Employee_id=emp.Employee_id and s1.Vehicle_id= @Vehicle_id

  --Aq
  Select @AF_Date= CONVERT(VARCHAR(10),timestamp,101),@AF_Time= CONVERT(VARCHAR(10),timestamp,108)/*, */ FROM log_Station s1 where  @Vehicle_id= s1.Vehicle_id/*HVQ_Vehicle*/ 
  --LW &R
  Select @LWR= Employee_name From log_Station s1,HVQ_Employee emp where s1.station_code='LW' and s1.Employee_id=emp.Employee_id and s1.Vehicle_id= @Vehicle_id
  --Noise
  Select @Noise= Employee_name From log_Station s1,HVQ_Employee emp where s1.station_code='Noise' and s1.Employee_id=emp.Employee_id and s1.Vehicle_id= @Vehicle_id
  --LW & L
  Select @LWL= Employee_name From log_Station s1,HVQ_Employee emp where s1.station_code='LW' and s1.Employee_id=emp.Employee_id  and s1.Vehicle_id= @Vehicle_id
  --Elc
  Select @Elec= Employee_name From log_Station s1,HVQ_Employee emp where s1.station_code='Elc' and s1.Employee_id=emp.Employee_id  and s1.Vehicle_id= @Vehicle_id


SELECT  @L1_Employee as N'@L1_Employee',
        @L2_Employee as N'@L2_Employee',
        @L3_Employee as N'@L3_Employee',
        @L4_Employee as N'@L4_Employee',
        @R1_Employee as N'@R1_Employee',
        @R2_Employee as N'@R2_Employee',
        @R3_Employee as N'@R3_Employee',
        @AF_Date as N'@AF_Date',
        @AF_Time as N'@AF_Time',
        @LWR as N'@LWR',
        @Noise as N'@Noise',
        @LWL as N'@LWL',
        @Elec as N'@Elec'

END

当我扫描条形码时,车辆 ID 应显示在车架号字段中。我需要编写存储过程来从数据库中提取车辆 ID。

【问题讨论】:

  • 是的,您必须将车辆 ID 传递给程序,程序将返回具有该车辆属性的光标。
  • @Pirate,谢谢先生。能详细点吗?
  • 这是 sqlserver 代码。您是在尝试转换为 mysql 还是问题标记不正确?
  • @P.Salmon,标签错误。
  • 为此,您需要输入条形码和包含汽车属性的输出数据集。这只是一个select 声明。我不知道您发布的存储过程是什么意思。您实际上尝试过什么。你写过代码吗?你用什么来获取条形码值?

标签: sql-server database stored-procedures


【解决方案1】:

我不清楚您的数据 - 但我准备了您的存储过程。您的 Select 行都在拉员工姓名,如果这不正确,那么您可以在此处调整所做的工作:

表格:

Create Table log_station
(
Employee_id varchar(10),
Vehicle_id varchar(50),
station_code varchar(10)

)
Insert Into log_station Values
('x','1','L1'),
('x','1','L2'),
('x','1','L3'),
('x','1','L4'),
('y','1','R1'),
('y','1','R2'),
('y','1','R3'),
('x','1','LWR'),
('x','1','Noise'),
('x','1','LWL'),
('x','1','Elec')

Create Table HVQ_Employee
(
Employee_id varchar(10),
employee_name varchar(50)
)
Insert Into  HVQ_Employee Values
('x','Bill Smith'),
('y','Mary Jones')

存储过程:对您的 GetDate 过程进行了一些调整,一些选择标准似乎有拼写错误

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Alter  PROCEDURE [dbo].[vq_proc]
@Vehicle_id varchar(50),
@L1_Employee varchar(50) output,
@L2_Employee varchar(50) output,
@L3_Employee varchar(50) output,
@L4_Employee varchar(50) output,
@R1_Employee varchar(50) output,
@R2_Employee varchar(50) output,
@R3_Employee varchar(50) output,
@AF_Date varchar(50) output,
@AF_Time varchar(50) output,
@LWR varchar(50) output,
@Noise varchar(50) output,
@LWL varchar(50) output,
@Elec varchar(50) output

AS
BEGIN

  --L1 employee
  Select @L1_Employee= emp.Employee_name From log_Station s1,HVQ_Employee emp where s1.station_code='L1' and s1.Employee_id=emp.Employee_id and s1.Vehicle_id= @Vehicle_id
  --L2
  Select @L2_Employee= emp.Employee_name From log_Station s1,HVQ_Employee emp where s1.station_code='L2' and s1.Employee_id=emp.Employee_id and s1.Vehicle_id= @Vehicle_id
  --L3
  Select @L3_Employee= emp.Employee_name From log_Station s1,HVQ_Employee emp where s1.station_code='L3' and s1.Employee_id=emp.Employee_id and s1.Vehicle_id= @Vehicle_id
  --L4
  Select @L4_Employee= emp.Employee_name From log_Station s1,HVQ_Employee emp where s1.station_code='L4' and s1.Employee_id=emp.Employee_id and s1.Vehicle_id= @Vehicle_id

  --R1
  select @R1_Employee= emp.Employee_name from log_Station s1,HVQ_Employee emp where s1.station_code='R1' and s1.Employee_id=emp.Employee_id and s1.Vehicle_id= @Vehicle_id
  --R2
   select @R2_Employee= emp.Employee_name from log_Station s1,HVQ_Employee emp where s1.station_code='R2' and s1.Employee_id=emp.Employee_id and s1.Vehicle_id= @Vehicle_id
  --R3
  Select @R3_Employee= Employee_name From log_Station s1,HVQ_Employee emp where s1.station_code='R3' and s1.Employee_id=emp.Employee_id and s1.Vehicle_id= @Vehicle_id

  --Aq
  Select @AF_Date= CONVERT(VARCHAR(10),GetDate(),101),@AF_Time= CONVERT(VARCHAR(10),GetDate(),108)/*, */ FROM log_Station s1 where  @Vehicle_id= s1.Vehicle_id/*HVQ_Vehicle*/ 
  --LW &R
  Select @LWR= Employee_name From log_Station s1,HVQ_Employee emp where s1.station_code='LWR' and s1.Employee_id=emp.Employee_id and s1.Vehicle_id= @Vehicle_id
  --Noise
  Select @Noise= Employee_name From log_Station s1,HVQ_Employee emp where s1.station_code='Noise' and s1.Employee_id=emp.Employee_id and s1.Vehicle_id= @Vehicle_id
  --LW & L
  Select @LWL= Employee_name From log_Station s1,HVQ_Employee emp where s1.station_code='LWL' and s1.Employee_id=emp.Employee_id  and s1.Vehicle_id= @Vehicle_id
  --Elc
  Select @Elec= Employee_name From log_Station s1,HVQ_Employee emp where s1.station_code='Elec' and s1.Employee_id=emp.Employee_id  and s1.Vehicle_id= @Vehicle_id

/*
SELECT  @L1_Employee as N'@L1_Employee',
        @L2_Employee as N'@L2_Employee',
        @L3_Employee as N'@L3_Employee',
        @L4_Employee as N'@L4_Employee',
        @R1_Employee as N'@R1_Employee',
        @R2_Employee as N'@R2_Employee',
        @R3_Employee as N'@R3_Employee',
        @AF_Date as N'@AF_Date',
        @AF_Time as N'@AF_Time',
        @LWR as N'@LWR',
        @Noise as N'@Noise',
        @LWL as N'@LWL',
        @Elec as N'@Elec'
*/
END

执行:

Declare @Vehicle_id varchar(50)
Declare @L1_Employee varchar(50)
Declare @L2_Employee varchar(50)
Declare @L3_Employee varchar(50)
Declare @L4_Employee varchar(50)
Declare @R1_Employee varchar(50)
Declare @R2_Employee varchar(50)
Declare @R3_Employee varchar(50)
Declare @AF_Date varchar(50)
Declare @AF_Time varchar(50)
Declare @LWR varchar(50)
Declare @Noise varchar(50)
Declare @LWL varchar(50) 
Declare @Elec varchar(50)

Set @Vehicle_id = '1'

Exec vq_proc @vehicle_id,
@L1_Employee Output,
@L2_Employee Output, 
@L3_Employee Output, 
@L4_Employee Output, 
@R1_Employee Output, 
@R2_Employee Output, 
@R3_Employee Output,
@AF_Date Output,
@AF_Time Output, 
@LWR Output, 
@Noise Output, 
@LWL Output, 
@Elec Output 

SELECT  @vehicle_id As N'@vehicle_id',
        @L1_Employee as N'@L1_Employee',
        @L2_Employee as N'@L2_Employee',
        @L3_Employee as N'@L3_Employee',
        @L4_Employee as N'@L4_Employee',
        @R1_Employee as N'@R1_Employee',
        @R2_Employee as N'@R2_Employee',
        @R3_Employee as N'@R3_Employee',
        @AF_Date as N'@AF_Date',
        @AF_Time as N'@AF_Time',
        @LWR as N'@LWR',
        @Noise as N'@Noise',
        @LWL as N'@LWL',
        @Elec as N'@Elec'

结果:

@vehicle_id @L1_Employee    @L2_Employee    @L3_Employee    @L4_Employee    @R1_Employee    @R2_Employee    @R3_Employee    @AF_Date    @AF_Time    @LWR        @Noise      @LWL        @Elec
1           Bill Smith      Bill Smith      Bill Smith      Bill Smith      Mary Jones      Mary Jones      Mary Jones      12/28/2018  08:35:36    Bill Smith  Bill Smith  Bill Smith  Bill Smith

【讨论】:

    猜你喜欢
    • 2018-06-15
    • 1970-01-01
    • 2023-02-02
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多