3 回答

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個(gè)贊
不幸的是,SQL Server 2005中沒(méi)有簡(jiǎn)單的方法。盡管如此,Lukasz的答案對(duì)于SQL Server 2008是正確的,而且該功能早就該了。
任何解決方案都將涉及臨時(shí)表,或者傳入xml / CSV并在UDF中進(jìn)行解析。示例:更改為xml,在udf中解析
DECLARE @psuedotable xml
SELECT
@psuedotable = ...
FROM
...
FOR XML ...
SELECT ... dbo.MyUDF (@psuedotable)
不過(guò),您想在更大范圍內(nèi)做什么?可能還有另一種方式可以做到這一點(diǎn)...
編輯:為什么不以字符串形式傳遞查詢,并使用帶有輸出參數(shù)的存儲(chǔ)過(guò)程
注意:這是未經(jīng)測(cè)試的代碼,您需要考慮SQL注入等。但是,它也滿足您的“單列”要求,并且應(yīng)該對(duì)您有所幫助
CREATE PROC dbo.ToCSV (
@MyQuery varchar(2000),
@CSVOut varchar(max)
)
AS
SET NOCOUNT ON
CREATE TABLE #foo (bar varchar(max))
INSERT #foo
EXEC (@MyQuery)
SELECT
@CSVOut = SUBSTRING(buzz, 2, 2000000000)
FROM
(
SELECT
bar -- maybe CAST(bar AS varchar(max))??
FROM
#foo
FOR XML PATH (',')
) fizz(buzz)
GO

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊
您可以,但是沒(méi)有任何表格。從文檔:
對(duì)于Transact-SQL函數(shù),允許所有數(shù)據(jù)類型,包括CLR用戶定義類型和用戶定義表類型,但時(shí)間戳數(shù)據(jù)類型除外。
您可以使用用戶定義的表類型。
用戶定義表類型的示例:
CREATE TYPE TableType
AS TABLE (LocationName VARCHAR(50))
GO
DECLARE @myTable TableType
INSERT INTO @myTable(LocationName) VALUES('aaa')
SELECT * FROM @myTable
因此,您可以做的是定義表類型,例如TableType定義使用該類型參數(shù)的funcion示例函數(shù):
CREATE FUNCTION Example( @TableName TableType READONLY)
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE @name VARCHAR(50)
SELECT TOP 1 @name = LocationName FROM @TableName
RETURN @name
END
該參數(shù)必須為READONLY。用法示例:
DECLARE @myTable TableType
INSERT INTO @myTable(LocationName) VALUES('aaa')
SELECT * FROM @myTable
SELECT dbo.Example(@myTable)
根據(jù)您要實(shí)現(xiàn)的目標(biāo),可以修改此代碼。
編輯: 如果您在表中有一個(gè)數(shù)據(jù),您可以創(chuàng)建一個(gè)變量:
DECLARE @myTable TableType
并從表中獲取數(shù)據(jù)到變量
INSERT INTO @myTable(field_name)
SELECT field_name_2 FROm my_other_table

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊
第1步:創(chuàng)建一個(gè)名為T(mén)ableType的表類型,該表將接受具有一個(gè)varchar列的表
create type TableType
as table ([value] varchar(100) null)
步驟2:創(chuàng)建一個(gè)函數(shù),該函數(shù)將上面聲明的TableType用作表值參數(shù),并將字符串值作為分隔符
create function dbo.fn_get_string_with_delimeter (@table TableType readonly,@Separator varchar(5))
returns varchar(500)
As
begin
declare @return varchar(500)
set @return = stuff((select @Separator + value from @table for xml path('')),1,1,'')
return @return
end
步驟3:將具有一個(gè)varchar列的表傳遞給用戶定義的類型TableType,并在函數(shù)中使用“,”作為分隔符
select dbo.fn_get_string_with_delimeter(@tab, ',')
- 3 回答
- 0 關(guān)注
- 714 瀏覽
添加回答
舉報(bào)