使用SQL Server

时间:2016-02-08 17:19:28

标签: sql sql-server tsql

我试图使用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 

2 个答案:

答案 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个字符的变量时,您可能仍会遇到问题 - 但后来我对您的数据集一无所知。