我有表Using _stm = _ZipArchiveEntry.Open
Image.FromStream(_stm, True, True).Save("C:\test.jpeg", _codec, params)
End Using
,它有35列(sdata
,id
,name
,TRx1
,TRx2
,{{1 },...,TRx3
,TRx4
,TRx30
,city
)
我想从score
列中获取数据。
我可以在这里使用循环吗?
我做了以下代码:
total
我做错了什么?我该如何解决这个问题?
答案 0 :(得分:3)
如果您的表名是sdata,则此代码应该适合您:
-- Grab the names of all the remaining columns
DECLARE @sql nvarchar(MAX);
DECLARE @columns nvarchar(MAX);
SELECT @columns = STUFF ( ( SELECT N'], [' + name
FROM sys.columns
WHERE object_id = (select top 1 object_id FROM sys.objects where name = 'sdata')
AND name LIKE 'TRx%' -- To limit which columns
ORDER BY column_id
FOR XML PATH('')), 1, 2, '') + ']';
PRINT @columns
SELECT @sql = 'SELECT ' + @columns + ' FROM sdata';
PRINT @sql;
EXEC (@sql);
注意我包含了PRINT语句,因此您可以看到正在发生的事情。您可能希望在测试时注释掉EXEC。
答案 1 :(得分:1)
通过复制/粘贴列名并将其更改为正确的名称,这将更容易实现。 然而如果你必须这样做,我根本不建议使用循环。此方法使用计数表生成要选择的列(在此示例中,列1
到30
,但可以更改),然后生成动态SQL语句以对{执行{1}}表:
SData
注意:Declare @From Int = 1,
@To Int = 30,
@Sql NVarchar (Max)
Declare @Columns Table (Col Varchar (255))
;With Nums As
(
Select *
From (Values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) As V(N)
), Tally As
(
Select Row_Number() Over (Order By (Select Null)) As N
From Nums A --10
Cross Join Nums B --100
Cross Join Nums C --1000
)
Insert @Columns
Select 'TRx' + Cast(N As Varchar)
From Tally
Where N Between @From And @To
;With Cols As
(
Select (
Select QuoteName(Col) + ',' As [text()]
From @Columns
For Xml Path ('')
) As Cols
)
Select @Sql = 'Select ' + Left(Cols, Len(Cols) - 1) + ' From SData'
From Cols
--Select @Sql
Execute (@Sql)
部分用于在执行之前预览生成的查询。
答案 2 :(得分:0)
您可以选择如下列名称:
SELECT column_name
FROM information_schema.columns
WHERE table_name = 'my name here'