【发布时间】:2011-12-20 04:41:24
【问题描述】:
我在这里看到很多人在堆栈溢出时出现此错误消息,并且都在另一种情况下得到它。在已经存在的问题中,我找不到自己的情况。所以我希望有人可以帮助我解决这个问题。我使用 SQL server 9 和 SQL management studio 10。
--import the customers.
CREATE TABLE #AllCustomers(CustomerName NVARCHAR(100), CustomerNr NVARCHAR(16));
BULK INSERT #AllCustomers
FROM 'C:\allcustomers.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
);
DECLARE @DefinitionId int;
--get the id of the definition for which I have to set values.
SELECT @DefinitionId = pkDefinitionId
FROM dbo.Definitions
WHERE Name = 'DEFINITION-OF-MY-ITEM';
DECLARE @TempA TABLE (CustomerName NVARCHAR(255), CustomerNr NVARCHAR(16));
--reduce the set of all customers to only the customer for whom I have to insert.
WITH MyView AS
(SELECT kciv.CustomerNr
FROM dbo.CustomerItems kciv
INNER JOIN dbo.DefinitionToItem civ ON civ.pkDefinitionToItemId = kciv.pkCustomerItemId
WHERE civ.fkDefinitionId = @DefinitionId)
INSERT INTO @TempA
SELECT k.CustomerName , k.CustomerNr
FROM #AllCustomers k
WHERE k.CustomerNr NOT IN (SELECT CustomerNr FROM MyView);
--used to store the generated primairy keys I need for creating relations.
DECLARE @ItemIds TABLE (CustomerName NVARCHAR(255), CustomerNr NVARCHAR(16), pkItemId int);
DECLARE @DefinitionToItemIds TABLE (CustomerName NVARCHAR(255), CustomerNr NVARCHAR(16), pkDefinitionToItemId int);
--insert the default values.
INSERT INTO dbo.Items
OUTPUT k.CustomerName, k.CustomerNr, inserted.pkItemId
INTO @ItemIds (CustomerName, CustomerNr, pkGenericValueId)
SELECT 2, 1, null, null, 1, null
FROM @TempA k;
--couple the values to the definition.
INSERT INTO dbo.DefinitionToItem
OUTPUT gvd.CustomerName, gvd.CustomerNr, inserted.pkDefinitionToItemId
INTO @DefinitionToItemIds
SELECT 1, 0, @DefinitionId, gvd.pkItemId
FROM @ItemIds gvd;
--couple the 'coupling' to the customers.
INSERT INTO dbo.CustomerItems
SELECT civd.pkDefinitionToItemId, civd.CustomerName, civd.CustomerNr
FROM @DefinitionToItemIds civd;
我在运行查询时遇到四个错误,都在代码示例末尾附近的两个输出行上。
消息 4104,级别 16,状态 1,行 64 无法绑定多部分标识符“k.CustomerName”。
消息 4104,第 16 级,状态 1,第 64 行 无法绑定多部分标识符“k.CustomerNr”。
消息 4104,第 16 级,状态 1,第 69 行 无法绑定多部分标识符“gvd.CustomerName”。
消息 4104,第 16 级,状态 1,第 69 行 无法绑定多部分标识符“gvd.CustomerNr”。
我检查了拼写错误,但没有找到(我可能在此处介绍了一些拼写错误,但同时更改了一些名称以删除上下文)。我不知道为什么会出错。我看过MSDN,但我找不到任何问题。
额外信息:
数据库架构如下:
- Items 表包含“值”(pkItemId,一堆其他列)
- 定义表包含“定义”(pkDefinitionId、名称、一堆其他列)
- DefinitionToItem 表将值与定义相匹配(pkDefinitionToItemId、fkDefinitionId、fkItemId)
- CustomerItems 表将客户链接到 DefinitionToItemId(pkDefinitionToItemId、CustomerName、CustomerNr)。
我需要实现的是将默认值(即“2、1、null、null、1、null”链接到 definitino 'DEFINITION-OF-MY-ITEM')插入到给定集合的项目数据库中顾客。有些人可能已经有了该定义的值,然后我应该跳过它们(因此是@TempA)。 所以我将值插入到 Items 中,然后在 DefinitionToItem 中插入定义和项目之间的耦合,最后通过插入到 DefinitionToItem 表中将客户耦合到 DefinitionToItem。
如果有比我正在做的更好的方法来实现这一点,那么我愿意接受建议。
【问题讨论】:
标签: sql sql-server sql-server-2005 tsql