标签: sql-server-2008-r2

在日期范围之间获取行在SQL Server中不起作用

在SQL Server 2008R2中,在两个日期之间提取数据不起作用.

我使用以下代码从INVOICE表中获取行和CREATED_DATE之间的行,这是我发送到存储过程的参数.@startdate@enddate

Select * 
from INVOICES INV 
where CONVERT(Varchar(10), INV.CREATED_DATE, 105)
      BETWEEN CONVERT(VARCHAR(10), @startdate, 105) 
          AND CONVERT(VARCHAR(10), @enddate, 105)
Run Code Online (Sandbox Code Playgroud)

它工作不正常,让我疯了

我做错了什么?..

sql sql-server sql-server-2008-r2

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

sql根据每行中的值更新许多行

我有一个非常低效的sql脚本,它采用下表,并使用游标填充val2.我希望能够通过单次更新更新所有val2值,但是每行使用val1计算val2.

val1: 1, val2 0
val1: 2, val2 0 
val1: 3, val2 0
val1: 4, val2 0
val1: 5, val2 0
Run Code Online (Sandbox Code Playgroud)

所以我想,你会有这样的事情:

UPDATE Table SET val2 = (some code based on val1 for each row)
Run Code Online (Sandbox Code Playgroud)

我怎么能把它写成一行sql?

sql sql-server-2008-r2

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

如何为特定的新主键记录插入默认值记录?

我有一个名为myTable的表,其中包含多个列,其中一些列有一个默认值,对于其余列,NULL是一个可能的值和可接受的值.

有一个名为pkVariable的主键,其余列名为column2,column3,column4和column5.column2和column3配置为分别获取默认值0和1,并配置为NOT NULL.column4和column5没有默认值,但它们被设置为可能具有NULL值.

我的问题是,如何在myTable中插入新的"空"记录.我的意思是,我想在myTable的新记录中包含主键值,column2和column3的默认值以及column4和column5的NULL值.

如果pkVariable有默认值或者是IDENTITY,我可以这样做:

INSERT INTO myTable DEFAULT VALUES;
Run Code Online (Sandbox Code Playgroud)

买我不能,'因为pkVariable必须在INSERT子句中获得pkValue.

我可以用:

INSERT INTO myTable VALUES (pkValue, DEFAULT, DEFAULT, DEFAULT, DEFAULT);
Run Code Online (Sandbox Code Playgroud)

它有效,但我不想依赖于列数.

因此,实现目标的正确语法是什么?

我错误地认为我可以这样做:

INSERT INTO [myTable] ([pkVariable]) VALUES (pkValue) DEFUALT VALUES;
Run Code Online (Sandbox Code Playgroud)

并想到这个方向:

WITH pkVariable = pkValue
INSERT INTO [myTable] DEFAULT VALUES;
Run Code Online (Sandbox Code Playgroud)

还有其他建议吗?

sql sql-server sql-server-2008 sql-server-2008-r2

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

SQL Server 2008 r2,麻烦将int转换为十进制

我正在尝试做一些似乎是int到十进制的基本转换,它不起作用.我已经尝试在插入之前执行演员表,没有更好的.我想使用小数值来显示百分比变化.代码如下,以及输出.任何帮助都会很棒..

DECLARE @tblVar TABLE (LatestCount INT, PriorCount INT, 
                       PctChgLatestVsPrior DECIMAL, PctChgLatestVsAvg DECIMAL)

DECLARE @tbl CHAR(30)
DECLARE @dte DATE
DECLARE @dte2 DATE
DECLARE @latestCount INT
DECLARE @priorCount INT
DECLARE @avgAllCounts INT

SET @tbl = 'tblDailyPricingAndVol'
SET @dte = '5/8/12'
SET @dte2 = '5/7/12'

EXEC spAvgOfCountByDateAddedByTable @tbl, @avg = @avgAllCounts OUTPUT
EXEC spCountOfDateAddedByTableAndDate @tbl, @dte, @count = @latestCount OUTPUT
EXEC spCountOfDateAddedByTableAndDate @tbl, @dte2, @count = @priorCount OUTPUT

INSERT INTO @tblVar 
VALUES (@latestCount, @priorCount, 
    CAST((@latestCount-@priorCount) AS DECIMAL)/CAST(@priorCount AS DECIMAL), 
    CAST((@latestCount-@avgAllCounts) AS DECIMAL)/CAST(@avgAllCounts AS …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2008-r2

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

将任何标识列重置为以1开头作为下一个值

我正在构建一个SQL脚本来重置数据库.为此,我想清空几个(不是所有)表并将其标识值重置为0.

对于我使用的一些表TRUNCATE TABLE,但是当外表键引用表时,这不起作用.对于我使用的那些表DBCC CHECKIDENT(TableName, RESEED, 0).这适用于大多数表,但并非适用于所有表.如果表从未有任何数据,则当前标识值为NULL而不是0:

CREATE TABLE TableName (Id int identity, Value varchar(10))
DBCC CHECKIDENT(TableName)

-- Checking identity information: current identity value 'NULL', current column value 'NULL'.
Run Code Online (Sandbox Code Playgroud)

如果我使用DBCC CHECKIDENT(TableName, RESEED, 0)它们,它们将具有0作为下一个标识值.我可以改为使用1作为重新设定的值,但是其中包含数据的表将从2开始.

是否可以在任何sys视图中找到下一个标识值?如果我只是可以将下一个值转换为变量,我可以使用它将下一个值设置为0或1.我已经尝试过,IDENT_CURRENT('TableName')但是对于NULL和0都表示1为下一个值.

并且,我不想要任何问题,例如"为什么你需要所有这些从1开始"或任何其他问题表明另一个结果而不是我要求的结果.

t-sql identity sql-server-2008-r2

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

使用C#将Excel文件导入Microsoft SQL Server

我有一个C#程序,我想将Excel文件导入Microsoft SQL Server 2008 R2.

有人可以给我一个链接或教程,我可以完全理解如何做到这一点?

我已经做了很长时间了,我真的不知道如何实现这个.

请帮忙.谢谢.

c# excel import-from-excel sql-server-2008-r2

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

如何在.net web apps中使用参数进行长查询

假设您有一个冗长,复杂的查询来获取需要一些参数的结果.任何人都会这样做,但为了一个例子:

SELECT
    q.PROD_ID, q.NAME, q.STANDARD_PROD, q.DESCRIPTION, q.PART_NUMBER,
    q.COMMENTS, q.DESCRIPTION_URL,
    PROD_CATEGORY.DESCRIPTION AS CATEGORY_DESCRIPTION,
    PROD_TYPES.DESCRIPTION AS PROD_TYPE
FROM
    (SELECT
        PROD.PROD_ID,
        PROD.PROD_TYPE_ID,
        PROD.NAME,
        PROD.STANDARD_PROD,
        PROD.PROD_CATEGORY_ID,
        PROD.DESCRIPTION,
        PROD.PART_NUMBER,
        PROD.COMMENTS,
        PROD.DESCRIPTION_URL
     FROM
        (SELECT
            PROD_ID,
            PROD_TYPE_ID
         FROM
            XREF_PRODSYS
         WHERE
            (PROD_TYPE_ID = (SELECT
                                PROD_TYPE_ID
                             FROM
                                PROD_TYPES
                             WHERE
                                (NAME LIKE @prod_type_name)))) AS p
     LEFT OUTER JOIN PROD ON p.PROD_ID = PROD.PROD_ID
     WHERE
        (PROD.NAME LIKE @prod_name)
        AND (PROD.HIDDEN = 0)) AS q
LEFT OUTER JOIN PROD_CATEGORY ON q.PROD_CATEGORY_ID = PROD_CATEGORY.PROD_CATEGORY_ID
LEFT OUTER JOIN PROD_TYPES ON q.PROD_TYPE_ID = PROD_TYPES.PROD_TYPE_ID
Run Code Online (Sandbox Code Playgroud)

此特定查询需要两个参数,可能通过GET/POST传递给.NET …

c# web-applications .net-4.0 sql-server-2008-r2

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

WHERE子句抑制重复行

当主键位于新表上时,由于主键约束导致表复制错误,我遇到了问题.在通过不设置主键进行一些调查时,我能够在源表中找到重复的行,仍然不确定它是如何进入那里的,但我更好奇的是我发现的其余部分.

开始:

我有一个SQL查询,选择完整的表并返回以下内容:

SELECT *
 FROM search_term_suggest
 order by search_term
Run Code Online (Sandbox Code Playgroud)

你可以看到值是重复的,我不得不滚动表格来找到它.

SQL结果

但是当我将查询限制为:

SELECT *
 FROM search_term_suggest
 where search_term = 'b'
Run Code Online (Sandbox Code Playgroud)

你可以看到它筛选出第一个值.数据库上没有触发器或我可以看到的任何会限制选择查询的触发器.

添加了

我正在运行SQL 2008 r2.任何帮助是极大的赞赏.我正在复制表的数据库是一个SQL 2000数据库,当选择使用上面相同的查询时,我得到了我期望的结果.

编辑: search_term是一个varchar(100),search_term_suggest是一个不是视图的表.

sql sql-server-2008 sql-server-2008-r2

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

如何在包含连续int值的列中获得第一个间隙

我在SQL Server数据库表中有一个列,有一个包含整数值的列,我希望得到最大值,除非系列中有间隙,然后我想获得第一个缺失值.

例如,从下表,我希望获得价值4

1
2
null
3
Run Code Online (Sandbox Code Playgroud)

以上很简单,但是如果表中包含如下数据,我怎样才能找到我遗漏的id,在这种情况下它将是8

1
3
2
4
null
5
7
6
null
10
9
Run Code Online (Sandbox Code Playgroud)

//////////////////

编辑:

我最初实现了@ podiluska的答案,并且接受了它然而当我用超过10K行的表进行测试时它非常慢,所以我已经采取@vmvadivel的答案并稍微改变它,如下所示,它的工作速度非常快,但仍然不是100%我想要的:

SELECT Number
FROM 
(
    SELECT ROW_NUMBER() OVER(ORDER BY iValue) AS Number
    FROM tblNumbers WHERE iValue IS NOT NULL
) temp
WHERE Number NOT IN 
(
    SELECT iValue FROM tblNumbers WHERE iValue IS NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

这很好用但是如果所有的iValue字段都是null然后我什么都没有回来,但我希望它返回1,因为它将是系列中的第一个值,显然我可以在C#代码中处理这个但我确定如果上面的查询没有返回一行,必须有一种方法返回1?

我已经改变了顶层Select NumberSELECT Coalesce(Number, 1),但它没有工作,任何想法如何解决这个问题?

谢谢

sql sql-server sql-server-2008-r2

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

DROP FUNCTION不起作用?

我正在尝试创建一个函数,我已经在数据库中拥有该函数.为了绕过这个我正在使用drop函数,但我仍然继续在数据库中获得'theres already object'的命名'getCost'.可能是什么原因?

查询:

USE DWDB_PROPER;
GO
IF OBJECT_ID (N'dbo.getCost', N'TF') IS NOT NULL
DROP FUNCTION dbo.getCost;
GO
CREATE FUNCTION getCost(@person VARCHAR(10), @month TINYINT, @year SMALLINT, @Category    VARCHAR(20))
RETURNS INT 
AS
BEGIN
--function body here
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server sql-server-2008-r2

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