我试图使用SQL Server从数据库列中提取一部分值。 下面的示例在带有varchar字段的简单上下文中工作。结果是:& kickstart&这就是我想要的。
我现在想要从数据库中检索列时也这样做。 但是SQL并不喜欢我正在做的事情。我认为这件事很容易让我看不到。
Declare @FileName varchar(20) = '&kickstart&.cfg'
Declare @StartPos integer = 0
Declare @FileNameNoExt varchar(20)
SELECT @FileNameNoExt = Left(@FileName,( (charindex('.', @FileName, 0)) - 1))
SELECT @FileNameNoExt
以下是我似乎无法为我工作的SQL语句:
Declare @FileNameNoExt as varchar(20)
SELECT
i.InstallFileType AS InstallFileType,
o.OSlabel AS OSLabel,
SELECT @FileNameNoExt = (LEFT(oi.FIleName,( (charindex('.', oi.FIleName, 0) ) - 1) )) AS FileNameNoExt,
oi.FIleName AS FIleName
FROM
dbo.OperatingSystemInstallFiles oi
JOIN dbo.InstallFileTypes i ON oi.InstallFileTypeId = i.InstallFileTypeId
JOIN dbo.OperatingSystems o ON oi.OperatingSystemId = o.OperatingSystemId
答案 0 :(得分:1)
为什么你需要变量?出了什么问题:
SELECT
i.InstallFileType AS InstallFileType,
o.OSlabel AS OSLabel,
LEFT(oi.FIleName,( (charindex('.', oi.FIleName, 0) ) - 1) ) AS FileNameNoExt,
oi.FIleName AS FIleName
FROM
dbo.OperatingSystemInstallFiles oi
JOIN dbo.InstallFileTypes i ON oi.InstallFileTypeId = i.InstallFileTypeId
JOIN dbo.OperatingSystems o ON oi.OperatingSystemId = o.OperatingSystemId
答案 1 :(得分:0)
您已将SELECT
置于另一个SELECT
列表中而没有嵌套,这是SQL Server中的语法错误。
您还尝试在执行数据检索操作时分配变量。您可以选择要显示的所有数据,或将所有数据选择为变量,但不能同时选择两者。
当上述两个问题得到解决时,我认为在将文件名提交到只允许20个字符的变量时,您可能仍会遇到问题 - 但后来我对您的数据集一无所知。