Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在2个表之间运行存储过程查询并在引用列上插入数据库?_Sql_Sql Server 2008 - Fatal编程技术网

Sql 如何在2个表之间运行存储过程查询并在引用列上插入数据库?

Sql 如何在2个表之间运行存储过程查询并在引用列上插入数据库?,sql,sql-server-2008,Sql,Sql Server 2008,我创建了一个简单的存储过程来更新示例\u TAG\u NUMBERTEST表,但我需要它来通过使用SOLine和SONbr来执行查询,从另一个表PartItem获取ItemCode,但我不知道如何编写它 我需要做的第二件事是,当我的状态代码列为N001时,我的描述列将自动插入新的订单数据值,对于PR002,我的描述列将变为进度 我该怎么做?提前谢谢 ALTER PROCEDURE [dbo].[SampleTagNumberUpdate] @sONbr nvarchar(50) = NULL,

我创建了一个简单的存储过程来更新示例\u TAG\u NUMBERTEST表,但我需要它来通过使用SOLine和SONbr来执行查询,从另一个表PartItem获取ItemCode,但我不知道如何编写它

我需要做的第二件事是,当我的状态代码列为N001时,我的描述列将自动插入新的订单数据值,对于PR002,我的描述列将变为进度

我该怎么做?提前谢谢

ALTER PROCEDURE [dbo].[SampleTagNumberUpdate] 
@sONbr nvarchar(50) = NULL,
@SOLine nvarchar(50) = NULL,
@SerialNbr nvarchar(50) = NULL,
@StatusCode nvarchar(50) = NULL,
@PackType nvarchar(50) = NULL,
@PalletID nvarchar(50) = NULL,
@PackingListNo nvarchar(50) = NULL,
@ItemCode nvarchar(50) = NULL,
@CrDateTime nvarchar(50) = NULL,
@CrUserID nvarchar(50) = NULL,
@return nvarchar(50) = NULL OUTPUT
AS
BEGIN
SET NOCOUNT ON;

    IF EXISTS(SELECT sONbr , SOLine
              FROM [SampleSystem].[dbo].[Sample_TAG_NUMBERTEST]
              WHERE sONbr = @sONbr AND SOLine = @SOLine)
BEGIN
    UPDATE [SampleSystem].[dbo].[Sample_TAG_NUMBERTEST]
    SET     SerialNbr = @SerialNbr
            ,StatusCode = @StatusCode
            ,PackType = @PackType
            ,PalletID = @PalletID
            ,PackingListNo = @PackingListNo
            ,ItemCode = @ItemCode
            ,LastUpdDateTime = GETDATE()
            ,LastUpdUserID = @CrUserID

    WHERE sONbr = @sONbr AND SOLine = @SOLine

    IF @@ERROR <> 0
      Set @Return = 'UPDATE FAILED'
    ELSE
      Set @Return = 'UPDATE SUCCESSFULLY'
END
ELSE
BEGIN
   INSERT INTO [SampleSystem].[dbo].[Sample_TAG_NUMBERTEST](SONbr, SOLine, SerialNbr
            ,StatusCode
            ,PackType
            ,PalletID
            ,PackingListNo
            ,ItemCode
            ,CrDateTime
            ,CrUserID)
   VALUES(@sONbr, @SOLine, @SerialNbr, @StatusCode, @PackType
            ,@PalletID
            ,@PackingListNo
            ,@ItemCode
            ,GETDATE()
            ,@CrUserID)

   IF @@ERROR <> 0
  Set @Return = 'INSERT DATA FAILED'
   ELSE
      Set @Return = 'INSERT DATA SUCCESSFULLY'
END
END

我相信我已经为以下两个问题提供了一个例子:

UPDATE T
   SET ItemCode = (SELECT PI.ItemCode FROM PartItem AS PI WHERE PI.SO = @SO AND PI.SO_LINE = @SO_LINE),  
   DESC = CASE @StatusCode WHEN 'N001' THEN 'NEW ORDER' 
          ELSE CASE @StatusCode WHEN 'PR002' THEN  'PROGRESS' ELSE '' END
          END,
        <other columns here...>
FROM SAMPLE_TAG_NUMBERTEST AS T

感谢您的快速回答,了解如何以及在何处插入我的存储过程现在=谢谢,我将其缩短了一点^^^ CASE@StatusCode当'N001'时,然后当'PR001'时,将其改为'New',然后当'PR002'时,将其改为'Prepack In Progress',然后再改为'Prepack Completed'