簡體   English   中英

在SQL中,如何將VARCHAR轉換為STRING?

[英]In SQL, how can I convert a VARCHAR to a STRING?

我試圖使用參數在SQL Server 2008 R2上執行BULK INSERT操作。 但是,我遇到的問題是函數需要一個STRING,我將它傳遞給VARCHAR。 我的SQL在下面。

DECLARE @filepath VARCHAR(30)
DECLARE @current_symbol VARCHAR(30)

DECLARE symbol_cursor CURSOR FOR
SELECT symbol FROM stocks.dbo.description WHERE 1=1

OPEN symbol_cursor;

FETCH NEXT FROM symbol_cursor INTO @current_symbol

WHILE @current_symbol is not null
BEGIN
SET @filepath = 'C:\Users\stkerr\Desktop\stockPricing\' + @current_symbol + '.prices'
BULK
INSERT stocks.dbo.pricing
FROM @filepath
WITH
(
    FIRSTROW = 2,
    FIELDTERMINATOR=',',
    ROWTERMINATOR='\n',
    ORDER   ( [date], [open], high, low, [close],volume),
        ERRORFILE='C:\Users\stkerr\errors.txt'.
)

FETCH NEXT FROM symbol_cursor INTO @current_symbol
END 
GO

當我執行SET @filepath語句時,問題就出現了。

有任何想法嗎?

為了將變量( @filepath )中的文件指定為BULK INSERT ,您需要構造動態TSQL並執行它。

例如

DECLARE @str_command nvarchar(150)
SET @str_command = 'BULK INSERT [Customer_Sample] FROM ''' + @SourceFilePath + 
                   ''' WITH (formatfile = ''' + @FormatFilePath + 
                   ''', firstrow =' + cast(@RowNumber as nvarchar) + ')'
EXEC SP_EXECUTESQL @str_command

sql中沒有“字符串”類型。 如果你在使用set語句時遇到問題,可能是因為你給它的最大長度為30個字符,而你的文本比這長。

如果它的From @filepath給你帶來麻煩,那是因為批量插入不會在from語句中帶一個變量。

總的來說,我認為你的選擇可能是通過動態sql執行批量插入。 在變量中構建語句然后exec()它。

我同意Mitch Wheat,Dynamic SQL是要走的路。 您還需要解決其他一些需要解決的問題。 您的文件路徑需要用引號括起來,我認為您的錯誤文件名后可能會有一個雜散點。 試試像;

DECLARE @filepath VARCHAR(30)
DECLARE @current_symbol VARCHAR(30)
DECLARE @sql VARCHAR(8000)

SET QUOTED_IDENTIFIER OFF

SET @current_symbol = (SELECT "tst") 

IF @current_symbol is not null
BEGIN
SET @filepath = "C:\Users\stkerr\Desktop\stockPricing\" + @current_symbol + ".prices"

SET @sql = "BULK INSERT stocks.dbo.pricing FROM '" + @filepath + "' WITH ( FIRSTROW = 2, FIELDTERMINATOR=',', ROWTERMINATOR='\n', ORDER   ( [date], [open], high, low, [close],volume), ERRORFILE='C:\Users\stkerr\Desktop\stockPricing\errors.txt') "
END 

PRINT @SQL -- Check out the result of this, and try and run it by itself.

EXEC (@SQL)

祝好運。 請注意,我的示例不適用於Mitch建議的動態SQL。 讓它先工作,然后用Mitch的例子重新實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM