标签: stored-procedures

创建 Firebird 存储过程时出现错误 -104

我无法运行以下 SP

CREATE PROCEDURE SP_NYANSAT(
        FORNAVN VARCHAR(30),
        EFTERNAVN VARCHAR(30),
        ADRESSE VARCHAR(50),
        POSTNUMMER CHAR(4),
        TELEFONNUMMER CHAR(8),
        EMAIL VARCHAR(50))
    AS
    DECLARE VARIABLE ID INTEGER;
    BEGIN
      ID = GEN_ID(GEN_ANSAT_ID,1);
      INSERT INTO MYTABLE (ID, FORNAVN, EFTERNAVN, ADRESSE, POSTNUMMER, TELEFONNUMMER, EMAIL) VALUES (:ID, :FORNAVN, :EFTERNAVN, :ADRESSE, :POSTNUMMER, :TELEFONNUMMER, :EMAIL);
    END
Run Code Online (Sandbox Code Playgroud)

我得到的错误如下:

can't format message 13:896 -- message file C:\Windows\firebird.msg not found.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, column 1.
CREATE.
Run Code Online (Sandbox Code Playgroud)

firebird stored-procedures

0
推荐指数
1
解决办法
6445
查看次数

在 phpMyAdmin 中创建存储过程时出现“错误 #1313 RETURN is only allowed in a FUNCTION”

我正在尝试在 phpMyAdmin 中创建以下存储过程。但是,我不断收到此错误:#1313 - RETURN is only allowed in a FUNCTION

CREATE PROCEDURE IS_POINT_IN_POLYGON()
BEGIN
DECLARE n INT DEFAULT 0;
DECLARE pX DECIMAL(19,16);
DECLARE pY DECIMAL(19,16);
DECLARE ls LINESTRING;
DECLARE poly1 POINT;
DECLARE poly1X DECIMAL(19,16);
DECLARE poly1Y DECIMAL(19,16);
DECLARE poly2 POINT;
DECLARE poly2X DECIMAL(19,16);
DECLARE poly2Y DECIMAL(19,16);
DECLARE i INT DEFAULT 0;
DECLARE result INT(1) DEFAULT 0;
SET pX = X(p);
SET pY = Y(p);
SET ls = ExteriorRing(poly);
SET poly2 = EndPoint(ls);
SET poly2X = X(poly2);
SET poly2Y …
Run Code Online (Sandbox Code Playgroud)

mysql database stored-procedures phpmyadmin mysql-error

0
推荐指数
1
解决办法
5304
查看次数

如何确定日期是奇数周还是偶数周?

在我的表格中,我每天都有:

Id_______Startdate _______ EndDate __________MondayMorning _____MondayEvening ___TuMorning  ....  
121 _____2012-01-01________2012-12-31 ________2 ___________________2______________2   
122 _____2012-02-01________2012-08-05 ________1 ___________________2______________3   
Run Code Online (Sandbox Code Playgroud)

我已经使用 Startdate 和 EndDate 生成了日期列表。

我想知道这个日期是属于奇数周还是偶数周,以便我可以从输出中过滤数字为 3 或 1 的日期(请参阅第二条记录)。

如何过滤属于编号为 1 和 3 的奇数周和偶数周的日期?

sql sql-server stored-procedures

0
推荐指数
1
解决办法
7254
查看次数

截断表然后将数据插入同一个表中仅插入 1 条记录

有谁知道我在这里做错了什么,我有一个从远程源获取货币数据的网页,我获取数据并通过存储过程将其插入到 sql 数据库中。如果我将 truncate 放在插入语句前面,它会截断表并插入最后一条记录。如果我删除截断,它会插入所有记录。

IE

truncate table tblTablename;

insert into tblTablename
(columns)
values
(data)
Run Code Online (Sandbox Code Playgroud)

上面将插入 289 条记录中的最后一条记录。

如果我删除截断,所有 289 条记录都会被插入。

我尝试过使用 waitfor 1 秒,但也没有成功。

我不知道还能做什么,所以任何帮助将不胜感激

在网页中我有一个 foreach 循环

乔治

/--------------------- SQL 代码 -----------------

  ALTER PROCEDURE [dbo].[atSP_InsertCurrency]
-- Add the parameters for the stored procedure here
@CurrencyCountry VarChar(150),
@CurrencyRate VarChar(150),
@UpdateSuccessFail  INT OUTPUT 
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
TRUNCATE TABLE [dbo].[at_CurrencyRates];

WAITFOR DELAY '000:00:01' …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server stored-procedures sql-server-2008

0
推荐指数
1
解决办法
4万
查看次数

pl/sql 中带有嵌套函数的过程中的异常处理

我有一个 pl/sql 过程,如下所述

CREATE OR REPLACE PROCEDURE add_affectedCircle
(v_affected_circle IN v_circle.circle_code%type)
IS
    v_circle_id  NUMBER;

BEGIN
        v_circle_id := get_circleID(v_affected_circle);
        INSERT INTO vf_affected_circle (affected_circle) 
        values (v_circle_id);

EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR (-20101, 'Problem in loading Affected Circle data');
END;
/
Run Code Online (Sandbox Code Playgroud)

首先,我使用函数 get_circleID 检查 vf_circle 表中的circle_code 列中可用的特定数据 v_affected_circle 并返回与circle_code 关联的circle_id。

CREATE OR REPLACE FUNCTION get_circleID 
( v_circle_code  vf_circle.circle_code%TYPE)
RETURN vf_circle.circle_id%TYPE
IS
    return_value  vf_circle.circle_id%TYPE; 
BEGIN
    BEGIN
        SELECT circle_id INTO return_value
        FROM vf_circle
        WHERE circle_code = v_circle_code;
   END;
   RETURN return_value;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20102, …
Run Code Online (Sandbox Code Playgroud)

oracle plsql stored-procedures

0
推荐指数
1
解决办法
2853
查看次数

SQL Server 2012:提交与存储过程中的开始 tran 不匹配

我在 SQL Server 2012 Express 中编写了这个存储过程。

ALTER PROCEDURE [Dictionaries].[InsertCountry]
(@p_countryName nvarchar(128)
 , @ret_countryId int OUTPUT)
AS
BEGIN
    DECLARE @TransactionName VARCHAR(20) = 'INST_COUNTRY';

    BEGIN TRANSACTION @TransactionName;

IF len(@p_countryName) <= 3
BEGIN
        SET @ret_countryId = null
        ROLLBACK TRANSACTION @TransactionName;
END

INSERT INTO [Dictionaries].[CountryDetails] (name)
VALUES (@p_countryName);    

SET @ret_countryId = @@IDENTITY

INSERT INTO [Dictionaries].[Places] (name, Discriminator , CountryDetails_Id, RegionDetails_Id, CityDetails_Id)
VALUES (@p_countryName, 'Country' , @ret_countryId, null, null);

COMMIT TRANSACTION @TransactionName;
END
Run Code Online (Sandbox Code Playgroud)

我以这种方式使用这个方法,但我收到消息

COMMIT TRANSACTION 请求没有对应的 BEGIN TRANSACTION。

代码:

declare @ret int = null …
Run Code Online (Sandbox Code Playgroud)

sql sql-server stored-procedures transactions

0
推荐指数
1
解决办法
1048
查看次数

尝试在 C# 中传递 2 个参数时,SQL Server 存储过程或函数指定了太多参数

我正在尝试执行一个名为getLastFeatureUpdate.

我将在下面一步一步解释这个问题:

我在 SQL 中创建了一个表,如下所示:

CREATE TABLE testTable
(
      DayTime INT     NOT NULL, /*yyddhhmm, 1010102345*/
      FeatureNbr      SMALLINT  NOT NULL,
      Val FLOAT(53)   NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

我现在已经创建了一个名为getLastFeatureUpdate. 这里需要注意的是,我使用了 2 个参数@maxDateTime@tableName,因为它们每次都不同。所以我将在最后的 C# 代码中传递这两个参数。

存储过程(如果我@tableName text从过程和 C# 代码中删除。那么代码确实可以提及)

CREATE PROCEDURE getLastFeatureUpdate
    @maxDateTime float(53) = 0,
    @tableName text
AS
    SELECT
        test.FeatureNbr,
        test.DayTime,
        test.Val
    FROM
        @tableName test 
    WHERE
        DayTime = (SELECT MAX(DayTime)
                   FROM @tableName
                   WHERE FeatureNbr = test.FeatureNbr --This is what you are missing
                     AND DayTime …
Run Code Online (Sandbox Code Playgroud)

c# sql-server stored-procedures

0
推荐指数
1
解决办法
58
查看次数

在 .NET Core 中使用 Dapper 从存储过程插入获取 id

我正在使用 Dapper,并且编写了一个存储过程,用于插入一行并返回标识值。

使用Dapper,我想捕获这个标识值,但结果作为动态类型返回,我不知道如何访问这个id。

我的存储过程:

CREATE PROCEDURE USER_INSERT
    (@name  varchar(30),
     @job   varchar(30))    
AS    
BEGIN    
    INSERT INTO User (name, job) 
    VALUES (@name, @job)

    SELECT SCOPE_IDENTITY()
END 
Run Code Online (Sandbox Code Playgroud)

C#代码:

public async Task<int> InsertTest()
{
    using (var connection = new SqlConnection("myconnectionstring"))
    {
        string SP_INSERT = "USER_INSERT";

        var parameters = new { name = "Jon", job = "developer" };

        var insert =  await connection.QueryAsync(SP_INSERT, parameters, commandType: CommandType.StoredProcedure);

        var resultInsert = insert.SingleOrDefault();
    }

    return 0; //only for test
}
Run Code Online (Sandbox Code Playgroud)

查询结果截图,如何访问我的id字段?

在此处输入图片说明

c# sql-server identity stored-procedures dapper

0
推荐指数
1
解决办法
704
查看次数

如何通过存储过程从数据库中检索阿拉伯语记录?

我有一个看起来像这样的存储过程:

CREATE PROCEDURE sample_sp
    (
    @StartCreateDate NVARCHAR(30)= NULL,
    @EndCreateDate NVARCHAR(30)= NULL,
    @Name NVARCHAR(255) = NULL,
    @Offset INT = 1,
    @PageSize INT = 10
)
As
BEGIN
   SET NOCOUNT ON;
   SELECT * FROM sample_table
   WHERE
        (@StartCreateDate IS NULL OR [created_at] >= @StartCreateDate)
        AND
        (@EndCreateDate IS NULL OR [created_at] <= @EndCreateDate)
        AND
        (@NAME IS NULL OR [name] = @Name)
  ORDER BY id
  OFFSET (@Offset)*@PageSize ROWS
  FETCH NEXT @PageSize ROWS ONLY
END

Run Code Online (Sandbox Code Playgroud)

执行命令是

EXEC sample_sp @Name = N'????'
Run Code Online (Sandbox Code Playgroud)

我在字符串值之前使用的执行命令中也定义了NameasNVARCHAR(255)和 …

sql sql-server stored-procedures

0
推荐指数
1
解决办法
28
查看次数

将数据从表值参数插入表

我正在尝试创建一个存储过程,将 TVP 传递给该过程,然后将 TVP 中的一些数据插入到两个表中。

我已经实现了存储过程,但只有第二个插入(唯一不从 TVP 读取的)在工作。另外两个不起作用(不要插入任何东西),我似乎无法弄清楚原因。

我试图在 SQL Server 中创建一个虚拟 TVP 并在那里运行该过程,但这也不起作用。这是因为 TVP 是只读的吗?我不会假设,因为我实际上并没有在 TVP 中插入或更新数据。

有没有办法使这项工作?

谢谢您的帮助!

表值参数定义:

CREATE TYPE dbo.Ingredients 
AS TABLE 
( 
  Quantity int,
  Measure nvarchar(50),
  Ingredient nvarchar(50),
)
GO
Run Code Online (Sandbox Code Playgroud)

存储过程:

ALTER PROCEDURE uspCreateRecipe 
    (@IDUser int, 
     @RecipeName nvarchar(50), 
     @Category nvarchar(50), 
     @Difficulty nvarchar(50), 
     @Duration nvarchar(50), 
     @ING dbo.Ingredients READONLY, 
     @Execution text)
AS
BEGIN
    INSERT INTO dbo.Ingredients 
    VALUES ((SELECT Ingredient FROM @ING WHERE NOT EXISTS (SELECT Ingredient FROM @ING WHERE Ingredient IN (SELECT IngredientName FROM dbo.Ingredients))), 2)

    INSERT …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server stored-procedures table-valued-parameters

0
推荐指数
1
解决办法
55
查看次数