标签: sql-function

如何在SQL中替换多个字符?

这是基于类似的问题如何替换Access SQL中的多个字符?

我写了这个,因为sql server 2005似乎对where子句中的19个替换的replace()函数有限制.

我有以下任务:需要在列上执行匹配,并使用replace()函数提高匹配剥离多个不需要的字符的机会

DECLARE @es NVarChar(1) SET @es = ''
DECLARE @p0 NVarChar(1) SET @p0 = '!'
DECLARE @p1 NVarChar(1) SET @p1 = '@'
---etc...

SELECT *
FROM t1,t2 
WHERE  REPLACE(REPLACE(t1.stringkey,@p0, @es), @p1, @es) 
     = REPLACE(REPLACE(t2.stringkey,@p0, @es), @p1, @es)    
---etc 
Run Code Online (Sandbox Code Playgroud)

如果where子句中有> 19 REPLACE(),则它不起作用.所以我想出的解决方案是在这个例子中创建一个名为trimChars的sql函数(请原谅他们从@ 22开始

CREATE FUNCTION [trimChars] (
   @string varchar(max)
) 

RETURNS varchar(max) 
AS
BEGIN

DECLARE @es NVarChar(1) SET @es = ''
DECLARE @p22 NVarChar(1) SET @p22 = '^'
DECLARE @p23 NVarChar(1) SET @p23 …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2005 sql-function

34
推荐指数
4
解决办法
15万
查看次数

具有表值函数的INNER JOIN不起作用

我有一个表值函数返回一个表.当我尝试JOIN使用另一个表的表值函数时,我没有得到任何结果,但是当我将函数的结果复制到一个实际的表并执行相同的连接时,我得到了预期的结果.

查询看起来像这样:

Select *
From myTable
INNER JOIN fn_function(@parm1, @param2)
ON ....
Run Code Online (Sandbox Code Playgroud)

总而言之,我有大约4个这样的查询,每个查询的功能略有不同,但所有函数都生成相同的表但数据不同.对于其中一些查询的INNER JOIN作品,但对于其他人则没有.

有人建议为什么会这样吗?

t-sql sql-server function sql-function

33
推荐指数
1
解决办法
5万
查看次数

实体框架6代码优先功能映射

我想将Entity Framework 6集成到我们的系统中,但是有问题.

  1. 我想使用Code First.出于其他原因,我不想使用Database First*.edmx文件.
  2. 我使用属性映射[表],[列],这工作正常
  3. 数据库有许多用户定义的函数,我需要在Linq To Entities查询中使用它们.

问题是:

我不能通过像[Table],[Column]这样的属性来映射函数.只有1个属性可用[DbFunction],它需要*.edmx文件.

我可以在*.edmx文件中映射函数,但这意味着我不能使用实体的属性映射:[Table],[Column].必须在*.edmx或属性中填充映射.

我尝试通过以下代码创建DbModel并添加函数:

public static class Functions
{
    [DbFunction("CodeFirstNamespace", "TestEntity")]
    public static string TestEntity()
    {
        throw new NotSupportedException();
    }
}


public class MyContext : DbContext, IDataAccess
{
    protected MyContext (string connectionString)
        : base(connectionString, CreateModel())
    {
    }

    private static DbCompiledModel CreateModel()
    {
        var dbModelBuilder = new DbModelBuilder(DbModelBuilderVersion.Latest);
        dbModelBuilder.Entity<Warehouse>();
        var dbModel = dbModelBuilder.Build(new DbProviderInfo("System.Data.SqlClient", "2008"));

        var edmType = PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String);
        var payload =
            new EdmFunctionPayload
            {
                Schema = "dbo",
                ParameterTypeSemantics = ParameterTypeSemantics.AllowImplicitConversion, …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework sql-function ef-code-first entity-framework-6

27
推荐指数
2
解决办法
3万
查看次数

在SQL中调用标量值函数

我从oracle迁移了一个数据库,现在有一些标量值函数.

但是,当我打电话给他们时,我得到一个错误说:

找不到列"dbo"或用户定义的函数或聚合"dbo.chk_mgr",或者名称不明确.

我这样称呼它:

SELECT dbo.chk_mgr('asdf')
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

sql t-sql sql-function

23
推荐指数
3
解决办法
10万
查看次数

SQL函数return-type:TABLE vs SETOF记录

返回TABLEvs 的函数和SETOF records其他所有函数之间的区别是什么.

CREATE FUNCTION events_by_type_1(text) RETURNS TABLE(id bigint, name text) AS $$
    SELECT id, name FROM events WHERE type = $1;
$$ LANGUAGE SQL STABLE;

CREATE FUNCTION events_by_type_2(text) RETURNS SETOF record AS $$
    SELECT id, name FROM events WHERE type = $1;
$$ LANGUAGE SQL STABLE;
Run Code Online (Sandbox Code Playgroud)

这些函数似乎返回相同的结果.看到这个SQLFiddle.

sql postgresql sql-types return-type sql-function

23
推荐指数
2
解决办法
7609
查看次数

选择id为偶数的行

我正在传递一个简单的查询,我在其中搜索特定的行,其中OrderID是偶数

SELECT * 
FROM Orders 
WHERE mod(OrderID,2) = 0;
Run Code Online (Sandbox Code Playgroud)

错误:

查询表达式'mod(OrderID,2)= 0'中的语法错误(缺少运算符).

sql sql-server sql-function

20
推荐指数
6
解决办法
8万
查看次数

错误6046:无法生成存储功能的函数导入返回类型

我的sql数据库中有一个标量值函数.

将此函数导入Entity Framework模型时收到此错误:

Error 6046: Unable to generate function import return type of the store function 'GetContentByIdAndCul'.
The store function will be ignored and the function import will not be generated.   ..\EntityModels.edmx
Run Code Online (Sandbox Code Playgroud)

我的函数tsql是:

ALTER FUNCTION [FRM].[GetContentByIdAndCul] 
(@Id int,@Culture nvarchar(5))
RETURNS nvarchar(max)
AS
BEGIN
declare @Result nvarchar(max)

if @Id is not null
    set @Result='This Content not defined in this Language'

select @Result=Value from CUL.Contents
WHERE ID=@Id AND (CUL.Contents.Culture = LOWER(@Culture) 
            OR CUL.Contents.Culture = LOWER(SUBSTRING(@Culture,1,2)))   
return @Result      
END
Run Code Online (Sandbox Code Playgroud)

linq entity-framework sql-function

18
推荐指数
3
解决办法
1万
查看次数

为什么SQL Server标量值函数会变慢?

为什么标量值函数似乎会导致查询在连续使用它们的次数越多,累积运行速度越慢?

我有这个表是用从第三方购买的数据构建的.

我已经删除了一些东西,以使这篇文章缩短...但只是让你了解事情是如何设置的.

CREATE TABLE [dbo].[GIS_Location](
        [ID] [int] IDENTITY(1,1) NOT NULL, --PK
        [Lat] [int] NOT NULL,
        [Lon] [int] NOT NULL,
        [Postal_Code] [varchar](7) NOT NULL,
        [State] [char](2) NOT NULL,
        [City] [varchar](30) NOT NULL,
        [Country] [char](3) NOT NULL,

CREATE TABLE [dbo].[Address_Location](
    [ID] [int] IDENTITY(1,1) NOT NULL, --PK
    [Address_Type_ID] [int] NULL,
    [Location] [varchar](100) NOT NULL,
    [State] [char](2) NOT NULL,
    [City] [varchar](30) NOT NULL,
    [Postal_Code] [varchar](10) NOT NULL,
    [Postal_Extension] [varchar](10) NULL,
    [Country_Code] [varchar](10) NULL,
Run Code Online (Sandbox Code Playgroud)

然后我有两个查找LAT和LON的函数.

CREATE FUNCTION [dbo].[usf_GIS_GET_LAT]
(
    @City VARCHAR(30),
    @State CHAR(2)
) …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2005 sql-function

16
推荐指数
2
解决办法
4万
查看次数

如何在SQL Server中创建夏令时开始和结束功能

我需要在SQL服务器中创建一个函数,该函数返回夏令时开始日期时间和夏令时结束日期时间.

我在网上看到了一些例子,但他们都使用了3月的第1个日期和11月的第1个日期,这在技术上并不正确.

夏令时从3月的第2个星期日凌晨2点开始,到11月的第一个星期日凌晨2点结束.

我从下面的代码开始,但我确定它错了.任何帮助表示赞赏!:)

DECLARE @DSTSTART DATETIME

SELECT @DSTSTART = CASE WHEN 
DATEPART(MONTH, SYSDATETIME()) = 3
AND DATEPART(weekday, SYSDATETIME()) = 1
AND DATEDIFF(week,dateadd(week, datediff(week, 0, dateadd(month, datediff(month, 0, SYSDATETIME()), 0)), 0), SYSDATETIME() - 1) = 2
AND DATEPART(HOUR, SYSDATETIME()) = 2
THEN SYSDATETIME()
END
RETURN (@DSTSTART)
END
GO
Run Code Online (Sandbox Code Playgroud)

sql sql-function sql-server-2008 dst

14
推荐指数
2
解决办法
4万
查看次数

在SQL中创建和更改表值函数时不兼容的对象类型

我得到了给定函数的以下错误.

Msg 2010,Level 16,State 1,Procedure GetTableFromDelimitedValues,Line 2无法对'dbo.GetTableFromDelimitedValues'执行alter,因为它是不兼容的对象类型.

IF NOT EXISTS(SELECT 1 FROM sys.objects 
              WHERE object_id = OBJECT_ID('[GetTableFromDelimitedValues]'))
BEGIN
   EXECUTE('CREATE FUNCTION [dbo].[GetTableFromDelimitedValues](@input varchar(max),
       @delimiter char(1) = ",")) RETURNS @Result TABLE (
       Value nvarchar(4000)) AS BEGIN RETURN END')
END
GO


ALTER FUNCTION [dbo].[GetTableFromDelimitedValues](
       @input varchar(max),
       @delimiter char(1) = ',')
RETURNS @Result TABLE
(
       Value nvarchar(4000)
)
AS
BEGIN
    DECLARE @position int;
    DECLARE @column nvarchar(4000);

    WHILE LEN(@input) > 0
    BEGIN
        SET @position = CHARINDEX(@delimiter, @input);
        IF (@position < 0) OR (@position IS NULL) …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-function create-function sql-server-2008

12
推荐指数
2
解决办法
3万
查看次数