这是我从powershell中提取并将其插入#temptable:
的数据Name : SULESRKMA
Location : Leisure Services - Technology Services
Shared : False
ShareName :
JobCountSinceLastReset : 0
PrinterState : 131072
Status : Degraded
Network : False
我正在循环访问数据并从标识符中删除了值。我想使用这些标识符将值插入到具有相同列名称的表中。例如,我有一个名为@identifier =“Name”的变量和一个列名为Name的临时表#printers。我想做点什么:
SELECT --select statement
INSERT INTO #printers(@identifier)
但这似乎不起作用,不足为奇。有没有办法实现这个目标? (@identifier变量将在整个while循环过程中更改为数据中的其他标识符。)
欢迎任何甚至不涉及使用此类方法的替代建议。我的最终目标是将这些数据作为一行放入表中。
(如果重要的话,我目前正在使用Microsoft SQL Server Management Studio)
答案 0 :(得分:1)
首先,在这种情况下你不太可能需要循环任何东西。在考虑SQL时,请考虑基于集合的操作。
INSERT INTO #temptable (Column1Name, Column2Name, Column3Name)
VALUES (@identifer, @anotherIdentifier, @someOtherIdentifier)
--optional clauses
WHERE Column1Name = 'some value' OR Column1Name = @someIdentifier
或者你可以SELECT INTO
SELECT
@identifier,
@anotherIdentifer,
@someOtherIdentifier
INTO #temptable
对于您尝试将数据添加到的表格中的每一列,SELECT INTO
都有一个值非常重要。因此,例如,如果#temptable
中有4列,并且您只有3个要插入的值(第1,2和3列),那么您需要NULL
第4列或静态设置它。
SELECT
@identifier,
@anotherIdentifer,
@someOtherIdentifier,
NULL
INTO #temptable
--or
SELECT
@identifier,
@anotherIdentifer,
@someOtherIdentifier,
'static value'
INTO #temptable
修改强>
如果要使用varible指定要插入的列,则必须使用动态sql。这是一个例子:
if object_id ('tempdb..#tempTable') is not null drop table #tempTable
create table #tempTable (Column1Name int, Column2Name int, Column3Name int)
declare @columnName varchar(64) = 'Column1Name'
declare @sql varchar(max)
set @sql =
'insert into #tempTable (' + @columnName + ')
select 1'
exec(@sql)
select * from #tempTable