我有一個表T與2列C1和C2如何在T-SQL函數中爲所有列名添加前綴?
我想要一個函數,返回T後,但所有列名前加「PREFIX_」。
前綴是傳遞給函數的動態字符串。
有可能嗎?
我想是這樣
SELECT C1 AS @prefix + 'C1',
C2 AS @prefix + 'C2'
FROM T
我有一個表T與2列C1和C2如何在T-SQL函數中爲所有列名添加前綴?
我想要一個函數,返回T後,但所有列名前加「PREFIX_」。
前綴是傳遞給函數的動態字符串。
有可能嗎?
我想是這樣
SELECT C1 AS @prefix + 'C1',
C2 AS @prefix + 'C2'
FROM T
由於其已知的列數,你可以構建與別名和exec()
它的SQL字符串;
declare @prefix varchar(32) = 'prefix_'
declare @sql nvarchar(1024)
set @sql = 'select C1 as [' + @prefix + 'C1], C2 as [' + @prefix + 'C2] from T'
exec(@sql)
我可以使用exec返回表嗎? – Rohit
'exec'在函數中不可用 –
即使您不知道已經存在的列,也可以這樣做。
declare @prefix varchar(20)
declare @sqltext nvarchar(500)
set @prefix = 'prefix_'
declare @columnnames varchar(500)
select @columnnames = coalesce(@columnnames, '')+',' +column_name + ' '+ @prefix+column_name
from INFORMATION_SCHEMA.COLUMNS a where table_name = 't' and table_schema = 'dbo'
set @sqltext = 'select '+stuff(@columnnames,1,1,char(0))+' from t'
exec(@sqltext)
我可以創建一個函數來返回上述結果嗎? – Rohit
不,但您可以創建一個存儲過程並將結果重定向到一個表中。我沒有看到使用此功能的優點。 –
@Rohit它只能用動態sql解決你的問題。動態SQL不會在函數中工作,您將不得不使用存儲過程。 –
想要寫入的函數總是在同一張表上運行,還是要指定任意表? – Tao
@Tao同表總是 – Rohit
我已經要求對您的問題進行編輯,以澄清您要更改列名稱,而不是值。正如@Alex K.在下面指出的那樣,某種形式的Dynamic SQL是返回結果集的唯一方式,它具有不同的/未知的模式。您不能使用函數,但可以將動態SQL包裝在存儲過程中。 – Tao