我是初学SQL用户(未经过正式培训;仅限OJT),需要一些简单的更新声明方面的帮助.我想写一个更新声明,允许我列出ID.下面的陈述是我目前的写作方式.理想情况下,该声明允许我将其写成"在(49-57)中的plantunitid.有没有办法做到这一点?感谢您提供的任何帮助.
更新plantfunctiontable set decommissioned = 1其中plantunitid in(49,50,51,52,53,54,55,56,57)
我正在使用下面的SQL命令更新名为Address的列,该值包含换行符,我想用分号替换它们.在Query Analayzer中,预览看起来很完美但是当我检查企业管理器(MS SQL 2000)中的数据时,我仍然看到正方形,即换行.我不是在改变吗?我哪里错了?谢谢
IF NOT EXISTS(SELECT * FROM MyTable WITH(nolock) WHERE Key = 'MyKey')
INSERT MyTable(Key) Values('MyKey')
Run Code Online (Sandbox Code Playgroud)
如果表中不存在该值,查询是否会获取锁定?
我有以下脚本:
SELECT left(SHI.FSOKEY, 6) AS [SoNo]
, substring(SHI.FSOKEY, 7, 3) AS [So Item]
, right(SHI.FSOKEY, 3) AS [So Rels]
, QAL.FCLOT AS [LotSerial]
FROM shmast SHM
INNER JOIN shitem SHI
ON SHM.FSHIPNO = SHI.FSHIPNO
INNER JOIN qalotc QAL
ON SHM.FSHIPNO = Left(QAL.FCUSEINDOC, 6)
AND substring(QAL.FCUSEINDOC, 7, 6) = SHI.FITEMNO
Run Code Online (Sandbox Code Playgroud)
这会产生如下所示的输出:
SoNo So Item SoRels LotSerial
123456 1 001 ABCD
123456 1 001 AMOH
123456 1 001 POWK
123456 1 001 IUIL
123456 1 002 ABCE
Run Code Online (Sandbox Code Playgroud)
我想按SoNo,SoItem,SoRels分组并获得每个LotSerial的列表.所以,我的输出看起来像这样:
SoNo So Item SoRels …Run Code Online (Sandbox Code Playgroud) 我想知道SQL Server服务器场中每个数据库的状态.我用的是:
select name,
case status
when 32 then 'loading'
when 128 then 'recovering'
when 512 then 'offline'
when 4096 then 'single user'
when 64 then 'pre recovery'
when 256 then 'not recovered'
else 'Normal'
end
from sysdatabases
where name not in('master','msdb','model','tempdb','reportserver','reportservertempdb','pubs','distribution','northwind')
Run Code Online (Sandbox Code Playgroud)
但是一位朋友告诉我,状态可能是2的组合,例如32 + 128 = 32128.如何使用此数字查找数据库状态?
我有这个sql存储过程,它应该查看特定的表并根据日期列返回作业号.除了星期六早上运行时(这应该返回星期五的所有作业号,但不返回任何行),这很有用.有什么建议?这里有一些逻辑问题,我没有看到?我怎么跟踪这个?
存储过程
ALTER Procedure [dbo].[JC_GetJobsClosedYesterday]
As
SELECT [JobNumber]
FROM [NCLGS].[dbo].[JobClosedDate]
Where LastInvoiceDate between dbo.ufn_StartOfDay (DATEADD(d, -1, GETDATE())) AND dbo.ufn_StartOfDay (GETDATE())
order by JobNumber desc
Run Code Online (Sandbox Code Playgroud)
和一天的开始功能.
ALTER function [dbo].[ufn_StartOfDay] ( @inDate datetime )
RETURNS DateTime AS
BEGIN
DECLARE @Now datetime
set @Now = @inDate
DECLARE @DayStart datetime
set @DayStart = @Now
set @DayStart = DATEADD (ms, -DATEPART(ms,@Now),@DayStart)
set @DayStart = DATEADD (s, -DATEPART(s,@Now),@DayStart)
set @DayStart = DATEADD (mi, -DATEPART(mi,@Now),@DayStart)
set @DayStart = DATEADD (hh, -DATEPART(hh,@Now),@DayStart)
return @DayStart
END
Run Code Online (Sandbox Code Playgroud)
编辑:我的日期转换没有问题(除非它不知道如何处理星期五).我需要帮助返回没有行的部分.
样本数据:
JobNumber …Run Code Online (Sandbox Code Playgroud) 我试图找出一种方法来更新/替换两个字符串之间的文本.
例如,我需要能够更新字段并仅替换以下脚本标记之间的内容,而不会触及打开脚本标记之前的文本.
I want to keep this string<script type="text/javascript" language="javascript">********</script>
Run Code Online (Sandbox Code Playgroud)
我认为REPLACE不会起作用,因为脚本标签之间的文本会有所不同.是否有某种类型的通配符?
UPDATE Products_Joined
SET TechSpecs = REPLACE (CAST(TechSpecs AS NVARCHAR(MAX)), '<script type="text/javascript" language="javascript">********</script>', '<script type="text/javascript" language="javascript">new text</script>' )
Run Code Online (Sandbox Code Playgroud)
更新:使用@Parkyprg回答这有效,但不会替换结束</script>标记.我最终得到了这个.
I want to keep this string new text</script>
Run Code Online (Sandbox Code Playgroud)
我们如何删除结束脚本标记?
UPDATE Products_Joined
SET TechSpecs = REPLACE(CAST(TechSpecs AS NVARCHAR(MAX)),
SUBSTRING(CAST(TechSpecs AS NVARCHAR(MAX)),
CHARINDEX('<script type="text/javascript" language="javascript">',TechSpecs),
CHARINDEX('</script>',CAST(TechSpecs AS NVARCHAR(MAX))) -
CHARINDEX('<script type="text/javascript" language="javascript">',TechSpecs)
),' new text')
Run Code Online (Sandbox Code Playgroud) 我有一个带有7个表的SQL Server 2000数据库.我想将表数据从此数据库复制到另一个在SQL Server 2008实例上运行的数据库.
表格将完全相同,我只需要将数据从一个复制到另一个.
编辑:
尝试从SQL Server 2008导入时出现以下错误,我甚至检查了框放置目标表:
验证(错误)
消息
错误0xc0202049:数据流任务1:无法插入只读列"AllowedHtmlSystemID".
(SQL Server导入和导出向导)错误0xc0202045:数据流任务1:列元数据验证失败.
(SQL Server导入和导出向导)错误0xc004706b:数据流任务1:"组件"目标1 - DnnBBAllowedHtml"(79)"验证失败并返回验证状态"VS_ISBROKEN".
(SQL Server导入和导出向导)错误0xc004700c:数据流任务1:一个或多个组件验证失败.
(SQL Server导入和导出向导)错误0xc0024107:数据流任务1:任务验证期间出错.
(SQL Server导入和导出向导)
编辑:

你能帮我优化我的查询吗?我已经没有办法优化这个.这里的数据检索时间是6分钟,我想减少它.希望您能够帮助我.
-- Main query
DECLARE @ProdClass VARCHAR(10)
,@ModelID VARCHAR(10)
,@ServiceStartDate DATETIME
,@ServiceEndDate DATETIME
,@SvcID VARCHAR(10)
,@StateID VARCHAR(10)
,@AreaID VARCHAR(10)
SET @ProdClass = 'WPS'
SET @ModelID = 'BM'
SET @ServiceStartDate = convert(datetime, '10/1/2007')
SET @ServiceEndDate = CONVERT(DATETIME, '11/1/2007')
SET @SvcID = '358'
SET @StateID = 'JB'
SET @AreaID = ''
SELECT DISTINCT cus.MCUS_CUSID
,cus.MCUS_ENAME
,mod.MMOD_ENAME
,rou.MROU_SERNO
,svc.MSVC_SVCID AS SVC_NAME
,ar.MARE_ENAME
,dbo.ufn_GetLastXApptDate(rou.MROU_ROUID) AS MROU_APTDT
,rou.MROU_LSVDT
,(
CASE MROU_FRSVE
WHEN 'Y'
THEN 'FREE'
WHEN 'N'
THEN 'NORMAL'
END
) AS SERVICE_DUE_TYPE
FROM dbo.MROU_FIL …Run Code Online (Sandbox Code Playgroud) 我想在删除的记录上设置日期/时间戳,但我得到了奇怪的结果.当此触发器触发时,它将日期设置为1906!
我已尝试GETDATE()在查询中使用该函数,UPDATE并在表属性上使用默认值.它适用于我手动输入到DELETED_RECORDS表中的记录,但由于实际删除而移入的任何记录都有1906日期.我不确定发生了什么
ALTER TRIGGER [dbo].[Backup_TT_Deleted_Records]
ON [dbo].[tblLLS_TT]
FOR DELETE
AS
BEGIN
INSERT INTO dbo.tblLLS_TT_DELETED_RECORDS
SELECT *
FROM Deleted
UPDATE dbo.tblLLS_TT_DELETED_RECORDS
SET Deleted_DTTM = GETDATE()
WHERE dbo.tblLLS_TT_DELETED_RECORDS.Deleted_DTTM IS NULL
END
Run Code Online (Sandbox Code Playgroud)
还有上面的触发器,如果我在DELETED_RECORDS表上输入一个记录而留下Delete_DTTMnull然后删除一个记录,导致触发器触发它将正确填写该记录,但是进入DELETED_RECORDS表中的记录将再次具有日期我还注意到每条记录的日期增加一天.
知道这里可能会发生什么吗?
您希望我执行的任何其他测试让我知道,我会发布结果.这个很奇怪.谢谢!