我已经多次检查了这个.列数匹配但我一直收到错误,说fetch into语句与计数不匹配
declare cur_range CURSOR FOR
SELECT
GroupID,
OddEven,
RangeLow,
RangeHigh
PostCode1,
PostCode2,
ID,
OldPrimaryID,
ThFareID
FROM tmpNewPrimaryRange;
OPEN cur_range
FETCH NEXT FROM cur_range
into
@cur_GroupID
, @cur_OddEven
, @cur_RangeLow
, @cur_RangeHigh
, @cur_PostCode1
, @cur_PostCode2
, @cur_ID
, @cur_OldPrimaryID
, @cur_ThFareID
Run Code Online (Sandbox Code Playgroud)
错误:Cursorfetch:INTO列表中声明的变量数必须与所选列的变量数匹配.
我正在将大量行插入数据库并尝试在其上建立主键.如果我创建表并立即建立密钥,即使使用SQLBulkCopy命令,插入数据也需要10倍.所以这不是一个可行的选择.我现在要做的是插入数据,然后插入数据后,使用SMO创建主键.问题是我在alter()命令中不断获得超时异常,即使连接字符串中的超时设置为0.关于如何解决这个问题的任何想法?
connectionString.ConnectTimeout = 0;
ServerConnection scon = null;
using (SqlConnection conn = new SqlConnection(connectionString.ConnectionString))
{
conn.Open();
try
{
scon = new ServerConnection(conn);
Console.WriteLine("Server Connection Timeout: " + scon.ConnectTimeout);
Server serv = new Server(scon);
Database db = serv.Databases[connectionString.InitialCatalog];
Table table = db.Tables[tableName];
Index i = new Index(table, "pk_" + table.Name);
i.IndexKeyType = IndexKeyType.DriPrimaryKey;
foreach (String s in PrimaryKey)
{
i.IndexedColumns.Add(new IndexedColumn(i, s.Trim()));
}
table.Indexes.Add(i);
table.Alter();
scon.Disconnect();
}
finally
{
conn.Close();
}
}
Run Code Online (Sandbox Code Playgroud) 我知道我的数据太大了,这就是我得到异常的原因.然而,这似乎更像是对我的警告.我可以设置SQLCommand中的属性,这只是一个警告,无论如何插入截断的数据?试图消除所有可能快速回答的问题.我无法更改SQLDatabase中列的大小.我无权这样做.我想避免去每个字符串,并说如果长度> x采取子字符串.我只是希望在命令级别忽略它.
所以我有两列.一个包含前缀(nvarchar),而下一个包含nvarchar我希望从中删除所述前缀,我们将命名列为'words'.通常right(words, len(words) - len(prefix)会得到我的回答.但是,假设单词的开头有两个空格,前缀是单个空格.所以我试图从单词的开头删除一个空格.len(前缀)将返回0. datalength(前缀)将返回1但是由于某些字符占用2个字节,我不相信数据长度是答案.