tsql:tsql联合更新转换的访问查询正确吗?
我在access中有一个查询,需要将其转换为sql server 2005中的存储过程。tsql:tsql联合更新转换的访问查询正确吗?,tsql,union,Tsql,Union,我在access中有一个查询,需要将其转换为sql server 2005中的存储过程。 access中的查询如下所示: UPDATE tblitem, tblFileSignature SET tblitem.strFileProcesstype = [tblFileSignature].[STRFILEPROCESSTYPE], tblitem.strFileSignatureType = [tblFileSignature].[strfilesignaturetype] WHERE
access中的查询如下所示:
UPDATE
tblitem,
tblFileSignature
SET
tblitem.strFileProcesstype = [tblFileSignature].[STRFILEPROCESSTYPE], tblitem.strFileSignatureType = [tblFileSignature].[strfilesignaturetype]
WHERE
(((tblitem.strFileSignatureType) Is Null) AND
((tblitem.strFileExclude)="n") AND
((InStr([tblitem].[strfilesignature],[tblFileSignature].[strsignature]))=1) AND ((tblitem.uidItemType)=1 Or (tblitem.uidItemType)=5) AND
((tblitem.uidCollection)=[forms]![frmSetup]![txtInputCol]) AND ((tblitem.strFileSignature) Not Like "d0c*") AND
((tblFileSignature.strFileProcessType) Not Like "ZIP"));
在tsql中。。这是一样的吗
update tblItem
set
i.strFileProcesstype = f.strFileProcesstype,
i.strFileSignatureType = f.strfilesignaturetype
from tblItem as I UNION tblFileSignature as F
WHERE (((i.strFileSignatureType) Is Null) AND
((i.strFileExclude)="n") AND
((i.[strfilesignature] like F.strsignature)) AND
((i.uidItemType)=1 Or
(i.uidItemType)=5) AND
((i.uidCollection)=@inputcolumn AND
((i.strFileSignature) Not Like 'd0c%') AND
((F.strFileProcessType) Not Like 'ZIP'));
提前谢谢
更新:
因此,我将采用以下方法。如果我取消对declare和select子句的注释,并从declare向下执行,它就会运行;如果我对declare和select部分进行注释,它会在“;”附近显示error
UPDATE I
SET
I.strFileProcesstype = F.STRFILEPROCESSTYPE,
I.strFileSignatureType = F.strfilesignaturetype
--declare @uidcollectionID int
--select I.strFileSignatureType
from
tblItem I
inner join tblFileSignature F
on
I.strfilesignature = left(F.strsignature,len(I.strfilesignature))
WHERE I.strFileSignatureType Is Null
AND I.strFileExclude='n'
AND I.uidItemType in (1,5)
AND I.uidCollection = @uidCollectionID
AND left(I.strFileSignature,3) <> 'd0c'
AND F.strFileProcessType <> 'ZIP';
更新I
设置
I.strFileProcesstype=F.strFileProcesstype,
I.strFileSignatureType=F.strFileSignatureType
--声明@uidcollectionID int
--选择I.strFileSignatureType
从…起
tblItem I
内连接TBLFILEF签名
在…上
I.strfilesignature=左(F.strsignature,len(I.strfilesignature))
其中I.strFileSignatureType为Null
和I.strFileExclude='n'
和I.uidItemType in(1,5)
和I.uidCollection=@uidCollectionID
左(I.strFileSignature,3)“d0c”
和F.strFileProcessType'ZIP';
有什么想法吗?您应该更改
到双引号
单引号
至*
%
- 用类似的
替换
仪表
除此之外,我觉得还可以。不,你应该使用连接,而不是联合 可以将其设置为交叉联接,并继续应用WHERE子句中的联接条件,也可以将其设置为内部联接:
from tblItem as I INNER JOIN tblFileSignature as F
ON ((InStr(i.[strfilesignature],F.[strsignature]))=1)
并从WHERE子句中删除该条件(Lieven的答案也适用)。这应该接近您需要的条件。可能需要在连接条件下工作,但我认为我从INSTR的转换就可以了
UPDATE i
SET strFileProcesstype = fs.STRFILEPROCESSTYPE,
strFileSignatureType = fs.strfilesignaturetype
FROM tblitem i
INNER JOIN tblFileSignature fs
ON i.strfilesignature = LEFT(fs.strsignature, LEN(i.strfilesignature))
WHERE i.strFileSignatureType IS Null
AND i.strFileExclude='n'
AND i.uidItemType IN (1,5)
AND i.uidCollection = @inputcolumn
AND LEFT(i.strFileSignature,3) <> 'd0c'
AND fs.strFileProcessType <> 'ZIP';
更新i
设置strFileProcesstype=fs.strFileProcesstype,
strFileSignatureType=fs.strFileSignatureType
来自tblitem i
内部连接TBLFILEFS签名
ON i.strfilesignature=左(fs.strsignature,LEN(i.strfilesignature))
其中i.strFileSignatureType为Null
和i.strFileExclude='n'
和i.uidItemType IN(1,5)
和i.uidCollection=@inputcolumn
左(i.strFileSignature,3)“d0c”
和fs.strFileProcessType'ZIP';
我一直收到一个错误,在“ZIP”附近说“语法不正确”很难远程诊断。我觉得我的语法很好。如果你去掉分号会有什么区别吗?那没有分号。如果我加上分号,它在“;”附近会说不正确的语法如果我将declare@inputcolumn select*添加到from子句中,并突出显示其余部分。。它告诉我多部分标识符i.strFileSignaturetype“无法绑定…与strFileExclude、uidItemtype和where子句中的其他项相同。如果我在没有where子句的情况下执行select,则select调整将正常执行