SQL Server上的SQL-无法运行存储在变量中并使用exec执行的查询

Arv*_*ind 1 sql sql-server sql-server-2008

我试图在SQL Server 2008中执行以下SQL-

DECLARE @sql nvarchar, @fullname nvarchar;

SET @fullname='1patents_corrected.csv';
SET @sql = 'BULK INSERT GooglePatentsIndividualDec2012.dbo.patent from ' + @fullname+ '     WITH  ( DATAFILETYPE = "char", FIELDTERMINATOR = "^", ROWTERMINATOR =  "\n" );'

EXEC(@sql)
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个错误 -

Msg 2812,Level 16,State 62,Line 1
无法找到存储过程'B'.

我在这做错了什么?

更新 - 我更改了查询即.为每个varchar变量指定一个大小.现在代码是这样的 -

 DECLARE @MyCounter int;
 DECLARE @Fileprefix nvarchar(1000), @Filesuffix nvarchar(1000), @fullname nvarchar(1000), @Counter_string nvarchar(1000), @sql nvarchar(1000);

 SET @MyCounter = 1;
 SET @Fileprefix= 'C:\Arvind_gpd\patents\';
 SET @Filesuffix='data_corrected.csv';

 WHILE (@MyCounter < 10)

 BEGIN;
 Set @Counter_string= Cast(@MyCounter AS varchar(1) );
 Set @fullname = (@Fileprefix+ @Counter_string + @Filesuffix );
 SET @sql = 'BULK INSERT GooglePatentsIndividualDec2012.dbo.patent from ' + @fullname+ 
 '  WITH  ( DATAFILETYPE = "char", FIELDTERMINATOR = "^", ROWTERMINATOR = "\n" );'
 EXEC(@sql);
 SET @MyCounter = @MyCounter + 1;
 END;  
 GO
Run Code Online (Sandbox Code Playgroud)

但是我现在得到一个不同的错误 -

 Msg 102, Level 15, State 1, Line 1
Run Code Online (Sandbox Code Playgroud)

'C:'附近的语法不正确.消息319,级别15,状态1,行1关键字'with'附近的语法不正确.如果此语句是公用表表达式,xmlnamespaces子句或更改跟踪上下文子句,则必须以分号终止先前的语句.

现在我做错了什么:(?

SQL*_*ace 7

更改

DECLARE @sql nvarchar
Run Code Online (Sandbox Code Playgroud)

DECLARE @sql nvarchar(2000)
Run Code Online (Sandbox Code Playgroud)

默认情况下,大小为1

同样适用于@fullname nvarchar;给它一个尺寸