Sql server 该列必须在编译时出现
由于您的Sql server 该列必须在编译时出现,sql-server,database,tsql,sql-update,alter-table,Sql Server,Database,Tsql,Sql Update,Alter Table,由于您的ALTER语句(即DDL语句)将列group\u id添加到#tmpImportData,该列不能在同一批中的UPDATE语句中使用。因为不能执行添加列的DDL查询,然后执行在同一批中使用该列的DML查询 这里有一篇文章更详细地回答了这个问题,尽管它来自一个与你的问题相反的问题: 具体而言: SQL在执行批处理之前编译批处理。(批处理是GO命令之间的所有内容)。编译时,如果命令引用表中存在的列,则该列必须在编译时出现 由于您的ALTER语句(即DDL语句)将列group\u id添加到
ALTER
语句(即DDL语句)将列group\u id
添加到#tmpImportData
,该列不能在同一批中的UPDATE
语句中使用。因为不能执行添加列的DDL查询,然后执行在同一批中使用该列的DML查询
这里有一篇文章更详细地回答了这个问题,尽管它来自一个与你的问题相反的问题:
具体而言:
SQL在执行批处理之前编译批处理。(批处理是GO命令之间的所有内容)。编译时,如果命令引用表中存在的列,则该列必须在编译时出现
由于您的
ALTER
语句(即DDL语句)将列group\u id
添加到#tmpImportData
,因此该列不能在同一批中的UPDATE
语句中使用。DDE是否代表动态数据交换?还有,你应该知道。alter语句不会将列添加到tmp表中。我必须返回并突出显示它,然后运行它以添加它们。@CodeFlava--DDE应该是DDL。我已经修好了。另外,您的alter语句确实添加了列:altertable#tmpImportData add group_id INT
我之所以这么说是因为它运行之后。选择不会导致显示任何结果。因此,如果我突出显示select*和f5,它将显示没有添加列的表。所以我突出显示alter语句,然后点击f5。然后运行select。他们现在在那里。。。我希望StackOverflow能让我们添加视频…DDE代表动态数据交换吗?还有,你应该知道。alter语句不会将列添加到tmp表中。我必须返回并突出显示它,然后运行它以添加它们。@CodeFlava--DDE应该是DDL。我已经修好了。另外,您的alter语句确实添加了列:altertable#tmpImportData add group_id INT
我之所以这么说是因为它运行之后。选择不会导致显示任何结果。因此,如果我突出显示select*和f5,它将显示没有添加列的表。所以我突出显示alter语句,然后点击f5。然后运行select。他们现在在那里。。。我希望StackOverflow能让我们添加视频。。。
DROP TABLE #tmpImportData
USE database_name
GO
DECLARE @localVar VARCHAR(MAX) = 'data'
DECLARE @localVar VARCHAR(MAX) = 'data'
DECLARE @localVar VARCHAR(MAX) = 'data'
DECLARE @localVar int = 1
--Etc...
DECLARE @localVar INT
DECLARE @localVarVARCHAR(50)
DECLARE @localVar AS BINARY (16)
---Etc...
CREATE TABLE #tmpImportData (GuideFirstName VARCHAR(MAX), GuideLastName VARCHAR(MAX),
email VARCHAR(MAX), group_id_text VARCHAR(MAX), CandidateName VARCHAR(MAX),
grade_text VARCHAR(5), dateofbirth DATETIME
)
SET @sql = 'BULK INSERT #tmpImportData FROM '''+@fileName+''' WITH (FIELDTERMINATOR ='';'', ROWTERMINATOR = ''\n'', FIRSTROW = 1)'
EXEC (@sql)
--John O. How many rows from the import
SELECT @countCandidateImport = count(*) FROM #tmpImportData
--Fix some import data before any proccessing. We need to remove any punctuation, extra spaces, etc.
UPDATE #tmpImportData SET CandidateName = LTRIM(RTRIM(CandidateName)) FROM #tmpImportData
UPDATE #tmpImportData SET CandidateName = Replace(CandidateName,'.', '') FROM #tmpImportData
--UPDATE #tmpImportData SET CandidateName = Replace(CandidateName,',', '') FROM #tmpImportData
--Check DB for current district. If not exists create new one
SELECT @districtId = id, @ditrict_admins_restricted = CountAdminPermited, @candidates_restricted = count_candidate_restricted
FROM DistrictsTable WHERE name = RTRIM(LTRIM(@districtName))
--John O. What is whytry?
IF @districtId IS NULL
BEGIN
INSERT INTO districtstable (name, active, CountAdminPermited, why_try_permitted) VALUES (RTRIM(LTRIM(@districtName)), 1, 3, @iswhyTry)
SELECT @districtId = SCOPE_IDENTITY()
END
ELSE BEGIN
SELECT @count_created_district_admins = count(*)
FROM GuidesTable gt
INNER JOIN guides_to_permission gtp ON gtp.guide_id = gt.ID
WHERE gt.DistrictID = @districtId AND gtp.permission_id = 0 AND gt.Active = 1
IF(@count_created_district_admins >= @ditrict_admins_restricted)
BEGIN
SET @messageID = 1
END
SELECT @count_created_candidates = count(*)
FROM CandidatesTable ct
WHERE ct.DistrictID = @districtId AND ct.Active = 1
IF @count_created_candidates + @countCandidateImport >= @candidates_restricted
BEGIN
SET @messageID = 2
END
IF(@messageID <> -1)
RETURN
END
select 1
--Create School
DECLARE @schoolId AS INT
SET @schoolId = NULL
SELECT @schoolId = SchoolsTable.ID FROM SchoolsTable WHERE SchoolsTable.Name = LTRIM(RTRIM(@schoolName))
IF @schoolId IS NULL
BEGIN
INSERT INTO schoolstable (districtid, name, Active) VALUES (@districtId, @schoolName, 1)
SELECT @schoolId = SCOPE_IDENTITY()
END
ELSE
SET @adminGuideId = NULL
SELECT @adminGuideId = GuidesTable.ID FROM GuidesTable WHERE LTRIM(RTRIM(FirstName)) = LTRIM(RTRIM(@FirstName))
AND LTRIM(RTRIM(LastName)) = LTRIM(RTRIM(@LastName)) AND LTRIM(RTRIM(EmailAddress)) = LTRIM(RTRIM(@adminLogin))
select @adminGuideId
IF @adminGuideId IS NULL
BEGIN
SET @password = HASHBYTES('MD5', @passwordAdmin)
INSERT INTO GuidesTable (DistrictID, ClassID, FirstName , LastName , EmailAddress, [Password], createddate, Administrator, Active, website_access_level_id)
VALUES (@districtId, 0 , @FirstName , @LastName , @adminLogin , @password , GetDate() , 1 , 1 , 1)
SET @tmpGuideId = SCOPE_IDENTITY()
INSERT INTO guides_to_permission (guides_to_permission.guide_id ,guides_to_permission.permission_id)
VALUES (@tmpGuideId ,0 )
INSERT INTO guides_to_school_access (guides_to_school_access.guide_id , guides_to_school_access.school_id)
VALUES (@tmpGuideId , @schoolId )
END
ELSE BEGIN
SELECT @AccessToSchoolId = gtsa.id FROM guides_to_school_access gtsa WHERE @adminGuideId = gtsa.guide_id AND @schoolId = gtsa.school_id
IF @AccessToSchoolId IS NULL
BEGIN
INSERT INTO guides_to_school_access (guides_to_school_access.guide_id , guides_to_school_access.school_id)
VALUES (@adminGuideId , @schoolId )
END
END
GO
--Create unique guides
--declare @SQL1 nvarchar(max)
--set @SQL1 = '
ALTER TABLE #tmpImportData ADD group_id INT
ALTER TABLE #tmpImportData ADD guide_id INT
ALTER TABLE #tmpImportData ADD password_plain_text VARCHAR(500)
ALTER TABLE #tmpImportData ADD guide_email VARCHAR(500)
ALTER TABLE #tmpImportData ADD class_id INT
--exec sp_executesql @SQL1
GO
UPDATE #tmpImportData SET group_id = CAST(group_id_text AS INT)
UPDATE #tmpImportData SET group_id = 0 WHERE group_id IS NULL
SELECT * FROM #tmpImportData
GO