3 回答

TA貢獻1848條經(jīng)驗 獲得超6個贊
不幸的是,SQL Server 2005中沒有簡單的方法。盡管如此,Lukasz的答案對于SQL Server 2008是正確的,而且該功能早就該了。
任何解決方案都將涉及臨時表,或者傳入xml / CSV并在UDF中進行解析。示例:更改為xml,在udf中解析
DECLARE @psuedotable xml
SELECT
@psuedotable = ...
FROM
...
FOR XML ...
SELECT ... dbo.MyUDF (@psuedotable)
不過,您想在更大范圍內(nèi)做什么?可能還有另一種方式可以做到這一點...
編輯:為什么不以字符串形式傳遞查詢,并使用帶有輸出參數(shù)的存儲過程
注意:這是未經(jīng)測試的代碼,您需要考慮SQL注入等。但是,它也滿足您的“單列”要求,并且應該對您有所幫助
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貢獻1811條經(jīng)驗 獲得超4個贊
您可以,但是沒有任何表格。從文檔:
對于Transact-SQL函數(shù),允許所有數(shù)據(jù)類型,包括CLR用戶定義類型和用戶定義表類型,但時間戳數(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ù)您要實現(xiàn)的目標,可以修改此代碼。
編輯: 如果您在表中有一個數(shù)據(jù),您可以創(chuàng)建一個變量:
DECLARE @myTable TableType
并從表中獲取數(shù)據(jù)到變量
INSERT INTO @myTable(field_name)
SELECT field_name_2 FROm my_other_table

TA貢獻1788條經(jīng)驗 獲得超4個贊
第1步:創(chuàng)建一個名為TableType的表類型,該表將接受具有一個varchar列的表
create type TableType
as table ([value] varchar(100) null)
步驟2:創(chuàng)建一個函數(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:將具有一個varchar列的表傳遞給用戶定義的類型TableType,并在函數(shù)中使用“,”作為分隔符
select dbo.fn_get_string_with_delimeter(@tab, ',')
- 3 回答
- 0 關注
- 731 瀏覽
添加回答
舉報