我有一张叫做员工的桌子
empID name startdate Middate DEptID
1 kumar 2011-04-30 2005-09-13 1
2 kiran 2011-05-23 2006-08-13 1
3 kishor 2008-04-13 2009-04-23 6
4 anu 2009-09-03 2000-06-13 1
5 priya 2010-05-04 2010-04-13 6
6 sweth 2011-07-13 2007-12-16 1
7 manu 2011-08-15 2006-12-07 6
Run Code Online (Sandbox Code Playgroud)
有什么方法可以更新此表,以便所有员工的startdate = Middate
empID name startdate Middate DEptID
1 kumar 2005-09-13 2005-09-13 1
2 kiran 2006-08-13 2006-08-13 1
3 kishor 2009-04-23 2009-04-23 6
4 anu 2000-06-13 2000-06-13 1
5 priya 2010-04-13 2010-04-13 6
6 sweth 2007-12-16 2007-12-16 1
7 …Run Code Online (Sandbox Code Playgroud) 我使用生成的SQL脚本(sql 2k5)将列添加到表中.
我需要添加"检查是否存在",因为我的客户有时会运行脚本两次.(我无法控制这部分,这种情况一次又一次地发生)
我发现了一种加入sysobjects和syscolumns的方法,它可以工作.
我的问题是我必须在另一个表中添加一列,其中列不在表的末尾.
对于这个,SQL正在生成那么长的代码...用新列创建新的临时表,从旧表填充,删除旧表,最后重命名临时表.
这里的问题是这个脚本的脚本中有很多GO和事务...
我能做什么?
1.)删除所有GO - s?(不喜欢这个主意)
2.)在每个GO对之间添加我的IF?(不喜欢这个主意)
3.)是否有另一种有意义的方式,实施起来并不难
我无法想到任何事情,我可以检查发布版本,或者任何东西,而不仅仅是我的sysobjects和syscolumns join,但问题将是相同的.
因为GO-s,当它到达BEGIN的END时,我的If将被"遗忘"......
每当我将隔离级别从read committed更改为re uncommitted时.然后我重新启动SQL Server服务(2005)它会将隔离级别重置为read committed.
有没有办法阻止这种情况发生?(更改SQL Server重启时的值)
我想以特定格式选择日期列 - 假设我的日期格式是MM/dd/yyyy.我想选择它dd/MMM/yyyy
我可以这样做:
SELECT CONVERT(VARCHAR(11), myDateColumn, 106)
Run Code Online (Sandbox Code Playgroud)
问题是我想选择它作为类型DATETIME,而不是VARCHAR因为我想在这个列上排序我的网格.
如何在不使用MS SQL中的任何子查询的情况下找到第N个最高工资?
我的sql表结构是这样的
ID DataName
1 Lipsum lorem
3 lipsum's lorem
Run Code Online (Sandbox Code Playgroud)
我在asp.net中的内联查询就是这样
select * from table where DataName like 'lipsum's lorem'
Run Code Online (Sandbox Code Playgroud)
它给出了以下错误:
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 's'.
Msg 105, Level 15, State 1, Line 1
Unclosed quotation mark after the character string ''.
Run Code Online (Sandbox Code Playgroud)
我不想创建一个存储过程来防止这种情况,我希望使用内联查询来解决这个问题.
我试图为数据库创建一个GRANT脚本.
DB不能使用任何内置角色,因此我需要为存储过程重新创建db_reader,db_writer和EXEC到分配给此服务帐户的GRANT脚本中.
我试图自动化这个,而不是查看数据库中的每个项目并手动创建它.
到目前为止我有这个:
/* USER_TABLE */
select 'GRANT SELECT, INSERT, UPDATE, DELETE ON dbo.' + name + ' TO [DOMAIN\user]' from sys.objects where type = 'U' order by name;
/* INTERNAL_TABLE */
select 'GRANT SELECT, INSERT, UPDATE, DELETE ON dbo.' + name + ' TO [DOMAIN\user]' from sys.objects where type = 'IT' order by name;
/* VIEW */
select 'GRANT SELECT ON dbo.' + name + ' TO [DOMAIN\user]' from sys.objects where type = 'V' order by name;
/* …Run Code Online (Sandbox Code Playgroud) 我有表行:
ID CountryCode Status
----------- ----------- -----------
2 PL 1
3 PL 2
4 EN 1
5 EN 1
Run Code Online (Sandbox Code Playgroud)
并通过查询
SELECT [CountryCode]
,MAX([Status])
FROM [TestTable]
GROUP BY CountryCode,Status
Run Code Online (Sandbox Code Playgroud)
我想得到:
CountryCode Status
----------- -----------
PL 2
EN 1
Run Code Online (Sandbox Code Playgroud)
但我得到:
CountryCode Status
----------- -----------
EN 1
PL 1
PL 2
Run Code Online (Sandbox Code Playgroud)
这个查询有什么问题?
最好的祝福
编辑
好吧,Thanx for manz答案,但我没有添加部分查询,这是:
Having Status != 3
Run Code Online (Sandbox Code Playgroud)
所以我认为我必须在组中使用Status:/
用于创建和填充表格的脚本:
USE [DatabaseName]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TestTable](
[ID] [int] IDENTITY(1,1) NOT NULL,
[CountryCode] …Run Code Online (Sandbox Code Playgroud) KeyPress或KeyDown事件不可用,System.Web.UI.WebControls.TextBox只有一种方法可以使用Java-Scripts,但是想在这些事件中触发一些Sql查询.是否可以从JavaScript执行Sql查询?如果没有,那我该怎么做?
我试图避免在我的项目中使用标量值函数,所以我决定尝试使用CTE将其中一个转换为表值函数.
我知道标量值函数的性能很差,因为它们必须为每一行执行,而SQL服务器无法以任何方式对其进行优化(即它充当黑盒子).
这是我第一次尝试将其转换为表值函数...
CREATE FUNCTION [dbo].[fn_get_job_average] (@jobnumber VARCHAR(50))
RETURNS TABLE AS RETURN
(
WITH JobAverage AS
(
SELECT job.Jobnumber, CAST(AVG(CAST(jobMark.Mark AS DECIMAL(18,1))) AS DECIMAL(18,1)) AS Average
FROM job
INNER JOIN jobMark
ON job.Guid = jobMark.Guid
WHERE job.Jobnumber = @jobnumber
GROUP BY job.Jobnumber
)
SELECT Jobnumber,
CASE
WHEN EXISTS(SELECT * FROM JobAverage) THEN Average
ELSE 0.0 -- This never executes???, i.e. for job records that don't have a mark nothing is returned
END AS Average
FROM JobAverage
)
Run Code Online (Sandbox Code Playgroud)
我想输出一个包含工号和平均分数的表格.
对于有标记的工作,似乎没问题.也就是说,平均值与jobnumer一起返回.
对于没有商标的工作,似乎出错了.语句的ELSE部分不执行.也就是说,作为平均工作,我不会返回0.0.没有记录返回.我错过了什么吗? …
sql-server-2005 ×10
sql ×5
sql-server ×5
t-sql ×3
asp.net ×2
c# ×2
events ×1
if-statement ×1
javascript ×1
transactions ×1