在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脚本,它采用下表,并使用游标填充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?
我有一个名为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)
还有其他建议吗?
我正在尝试做一些似乎是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脚本来重置数据库.为此,我想清空几个(不是所有)表并将其标识值重置为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开始"或任何其他问题表明另一个结果而不是我要求的结果.
我有一个C#程序,我想将Excel文件导入Microsoft SQL Server 2008 R2.
有人可以给我一个链接或教程,我可以完全理解如何做到这一点?
我已经做了很长时间了,我真的不知道如何实现这个.
请帮忙.谢谢.
假设您有一个冗长,复杂的查询来获取需要一些参数的结果.任何人都会这样做,但为了一个例子:
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 …
当主键位于新表上时,由于主键约束导致表复制错误,我遇到了问题.在通过不设置主键进行一些调查时,我能够在源表中找到重复的行,仍然不确定它是如何进入那里的,但我更好奇的是我发现的其余部分.
开始:
我有一个SQL查询,选择完整的表并返回以下内容:
SELECT *
FROM search_term_suggest
order by search_term
Run Code Online (Sandbox Code Playgroud)
你可以看到值是重复的,我不得不滚动表格来找到它.

但是当我将查询限制为:
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 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 Number用SELECT Coalesce(Number, 1),但它没有工作,任何想法如何解决这个问题?
谢谢
我正在尝试创建一个函数,我已经在数据库中拥有该函数.为了绕过这个我正在使用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)