我宣告了@inAdd1-6 和@inAdd。@inAdd1-6 實際上將被傳遞到存盤程序中。
然后,我將拆分它們并處理地址,一些作為單個地址,而另一些則用于比較名稱、街道、郵政編碼等。
我希望我可以根據需要動態更改 @inAdd 來處理它,即 SET @inAdd = @inAdd#
DECLARE
@id nvarchar(255) = '[uid]',
@table varchar(255) = '[sub_customer]',
@company varchar(255) = '',
@inAdd nvarchar(max) = '',
@inAdd1 nvarchar(max) = 'BLANK,[Invoice Street],BLANK,BLANK,BLANK,[Invoice City],[Invoice State],[Invoice Zip],[Invoice Country]',
@inAdd2 nvarchar(max) = '[Shipping Name],[Shipping Street],BLANK,BLANK,BLANK,,[Shipping City],[Shipping State],[Shipping Zip],[Shipping Country]',
@inAdd3 nvarchar(max) = '[UPS Company],[UPS Street],BLANK,BLANK,BLANK,,[UPS City],[UPS State],[UPS Zip],[UPS Country]',
@inAdd4 nvarchar(max) = '[FedEx Name],[FedEx Street],BLANK,BLANK,BLANK,,[FedEx City],[FedEx State],[FedEx Zip],[FedEx Country]',
@inAdd5 nvarchar(max) = 'BLANK,[UPS From Street],BLANK,BLANK,BLANK,,[UPS From City],[UPS From State],[UPS From Zip],[UPS From Country]',
@inAdd6 nvarchar(max) = 'BLANK,[FedEx From Street],BLANK,BLANK,BLANK,,[FedEx From City],[FedEx From State],[FedEx From Zip],[FedEx From Country]',
WHILE (@addCnt >= @cnt)
BEGIN
SET @var = '@inAdd' CAST(@cnt AS nvarchar(3))
PRINT @var
SET @sql = 'SET @inadd = ' @var
PRINT @sql
EXEC sp_executesql @sql
SET @cnt = @cnt 1
... code to process @inAdd
END
PRINT 中的@sqlSET @inadd = @inAdd1正是我想要的。但是,當我使用 sp_executesql 時出現錯誤。
如果將SET @inadd = @inAdd1(或任何其他@inAdd#)作為單獨的命令放入,它可以正常作業。
uj5u.com熱心網友回復:
您使用 EXEC 執行生成的陳述句,因此您呼叫了一個新實體,該實體不知道您在基本腳本中所做的任何宣告 您必須將宣告添加到新腳本中
WHILE (@addCnt >= @cnt)
BEGIN
SET @var = '@inAdd' CAST(@cnt AS nvarchar(3))
PRINT @var
SET @sql = 'DECLARE ' @var ' nvarchar(50); DECLARE @inadd nvarchar(50); SET @inadd = ' @var
PRINT @sql
EXEC sp_executesql @sql
SET @cnt = @cnt 1
... code to process @inAdd
END
更新: 考慮到您對要求的確切定義,我建議您考慮其他方法:
將您的地址資料匯入到匯入表中,然后使用 sql 腳本處理此表中的所有行
撰寫一個簡單的命令列工具來處理您的地址(可能與處理單行的 sql 腳本有關)
如果您在 SQL-Server 上:
3.1)將您的地址資料作為“用戶定義的表型別”傳遞
3.2)將您的地址資料作為一個大字串傳遞,在您的腳本中使用分隔符 und 拆分字串,并將結果插入臨時表中,然后處理表中的所有行
最好的問候,吉米
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/409464.html
標籤:
下一篇:使用輸入選擇變數
