小编Rya*_*man的帖子

SQL Server IF NOT EXISTS用法?

好的,所以我的架构是这样的:

表:Timesheet_Hours

列:

  • Timesheet_Id(PK,int)
  • Staff_Id(int)
  • BookedHours(int)
  • Posted_Flag(布尔)

这是该表的极简化版本,但它将用于本说明的目的.假设一个人只能拥有一个时间表记录.

我要做的是将记录添加到另一个名为WorkLog的表中.这里的每条记录都有与之相关的时间.当该表更新时,我也想更新Timesheet_Hours.

在我更新Timesheet_Hours之前,我想首先检查相关的Timesheets是否尚未发布,然后我想检查是否实际上有一条记录要更新.

if语句的第一部分,检查时间表是否尚未发布,工作正常.问题是第二部分.检查它将要更新的记录已经存在.问题是它总是会引发错误.

注意:下面的代码是从WorkLog表上的update,insert和delete触发器运行的存储过程中提取的.@PersonID是该表的参数之一.如果我注释掉该语句的第二部分,存储过程可以正常工作.

IF EXISTS
    (
    SELECT 1
    FROM Timesheet_Hours
    WHERE Posted_Flag = 1
    AND Staff_Id = @PersonID
    )

    BEGIN
        RAISERROR('Timesheets have already been posted!', 16, 1)
        ROLLBACK TRAN
    END
ELSE
    IF NOT EXISTS
        (
        SELECT 1
        FROM Timesheet_Hours
        WHERE Staff_Id = @PersonID
        )

        BEGIN
            RAISERROR('Default list has not been loaded!', 16, 1)
            ROLLBACK TRAN
        END
Run Code Online (Sandbox Code Playgroud)

sql sql-server stored-procedures

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

在Code First Entity Framework中指定除dbo之外的SQL用户名(C#ASP.NET MVC 3)

我正在尝试从通过EF(代码优先)连接的ASP.NET MVC 3应用程序中的C#连接到共享托管环境中的SQL Server 2008数据库.

我的问题是生成的SELECT语句如下所示:

SELECT ... FROM [dbo].[TableName]
Run Code Online (Sandbox Code Playgroud)

抛出错误Invalid object name,但在我这样做时工作正常:

SELECT ... FROM [mySQLUserName].[TableName]
Run Code Online (Sandbox Code Playgroud)

如何指定dbo(例如mySQLUserName)以外的用户名?


编辑:

我发现的与此问题相关的最接近的文章是:

特别强调第二篇文章,但它没有指定如何设置除以外的用户名 dbo

c# sql-server asp.net-mvc entity-framework

14
推荐指数
3
解决办法
4997
查看次数

如何使用反射简化Linq扩展方法调用?

背景:

我有一个Web服务,它返回表中的行(作为参数提供的表名),其ID大于某个Id(也作为参数提供).我们假设Ids是顺序的.

我使用Linq to SQL进行数据库交互,所以我想将新行返回为:

List<WhateverObject>
Run Code Online (Sandbox Code Playgroud)

因为我们只在运行时知道表名,所以我不能以正常的方式使用Linq,这使得事情变得更加复杂.

题:

代码如下(并且有效).我该如何简化它?这似乎过于复杂.

private object GetUpdateList(string tableName, int Id, DataClassesDataContext db)
{
    PropertyInfo pi = db.GetType().GetProperty(tableName);

    var table = pi.GetValue(db, null);

    // Get type of object within the table.
    Type genericType = table.GetType().GetGenericArguments()[0];

    // The Where method lives on the Enumerable type in System.Linq
    var whereMethods = typeof(System.Linq.Enumerable)
        .GetMethods(BindingFlags.Static | BindingFlags.Public)
        .Where(mi => mi.Name == "Where");

    // There are actually 2 where methods - we want the one with 2 parameters
    MethodInfo whereMethod = …
Run Code Online (Sandbox Code Playgroud)

c# linq generics reflection expression-trees

6
推荐指数
1
解决办法
1266
查看次数

SQL Server:在行更新时为标识列重新生成值

SequenceId 是一个自动递增的标识列,但不是主键.

我想要发生的是当一行更新时,SequenceId设置为下一个可用值,例如:

_____________________
| SequenceId | Name |
| 1          | John |
| 2          | Jane |
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Run Code Online (Sandbox Code Playgroud)

将约翰更新为杰克.SequenceId设置为下一个可用的标识值.

_____________________
| SequenceId | Name |
| 3          | Jack |
| 2          | Jane |
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Run Code Online (Sandbox Code Playgroud)

这可能与SQL Server一起使用吗?如果没有,那将是另一种选择?

sql sql-server database-design

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