Sql 存储过程调用中出现语法错误
这给了我一个错误 “,”附近的语法不正确 我尝试删除或添加每个逗号。SQLServer2008Express和ManagementStudio 以下是供参考的程序:Sql 存储过程调用中出现语法错误,sql,sql-server,tsql,Sql,Sql Server,Tsql,这给了我一个错误 “,”附近的语法不正确 我尝试删除或添加每个逗号。SQLServer2008Express和ManagementStudio 以下是供参考的程序: EXEC dbo.Alpha @BatchName = 'Test',@BatchNumber = '2',@Profile = 'SQLTEST' 这是我一直在做的一个小项目。我知道还有很多其他/更好的方法可以做到这一点。虽然我很欣赏这些意见,但我真的更感兴趣的是让它做我想做的事情。这实际上是将所有空字段设置为最后一个非空字段
EXEC dbo.Alpha @BatchName = 'Test',@BatchNumber = '2',@Profile = 'SQLTEST'
这是我一直在做的一个小项目。我知道还有很多其他/更好的方法可以做到这一点。虽然我很欣赏这些意见,但我真的更感兴趣的是让它做我想做的事情。这实际上是将所有空字段设置为最后一个非空字段 有趣的变量名!谢谢您特别喜欢哪一行?请尝试在末尾放一个分号,并确保这是正在执行的唯一一行。您的动态sql select不应在列列表的周围加括号<代码>选择(docNumber,SortOrder)有一行“SET@think=”INSERT INTO Memory…”最有可能导致此问题。旁注:请注意,表变量不能以您尝试使用它的方式与动态SQL一起使用。动态SQL将在单独的作用域中执行。因此,它不能“看到”@memory表,也不能使用动态sql将该表用于插入数据。
CREATE PROCEDURE Alpha
@BatchName NVARCHAR(50),
@BatchNumber NVARCHAR(50),
@Profile NVARCHAR(50)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Batch_Reports NVARCHAR(50)
SET @Batch_Reports = @BatchName + '_' + @BatchNumber + '_reports'
DECLARE @Memory TABLE (docNumber NVARCHAR(50),SortOrder NVARCHAR(50));
DECLARE @Thought NVARCHAR(1000)
SET @Thought = 'INSERT INTO Memory (docNumber,SortOrder)
SELECT (docNumber,SortOrder) FROM dbo.' + @Batch_Reports
EXEC (@Thought)
DECLARE @GoldFish NVARCHAR(50)
DECLARE lost CURSOR FOR
SELECT DISTINCT docNumber
FROM @Memory
OPEN lost
FETCH NEXT FROM lost INTO @GoldFish
WHILE @@FETCH_STATUS = 0
BEGIN
IF NOT EXISTS (SELECT BatchIndexing.DocumentIndexID
FROM BatchIndexing
WHERE BatchIndexing.docNumber = @GoldFish
AND BatchIndexing.BatchName = @BatchName + ' ' + @BatchNumber)
BEGIN
INSERT INTO BatchIndexing (BatchName, docNumber, ProfileUsed, TotalPages)
VALUES (@BatchName + ' ' + @BatchNumber, @GoldFish, @Profile, '0');
SELECT SCOPE_IDENTITY() AS [DocumentIndexID]
DECLARE @Identity NVARCHAR(50)
SET @Identity = (SELECT DocumentIndexID
FROM BatchIndexing
WHERE BatchIndexing.docNumber = @GoldFish
AND BatchIndexing.BatchName = @BatchName + ' ' + @BatchNumber)
INSERT INTO IndexingFields (DocumentIndexID, FieldName, FieldValue)
VALUES(@Identity, 'Barcode', (NULL))
INSERT INTO IndexingFields (DocumentIndexID, FieldName, FieldValue)
VALUES (@Identity, 'Docket #', (NULL))
INSERT INTO IndexingFields (DocumentIndexID, FieldName, FieldValue)
VALUES (@Identity, 'Respondent Name', (NULL))
END
ELSE
BEGIN
FETCH NEXT FROM lost INTO @GoldFish
END
END
DECLARE @Omega TABLE (DocumentIndexID NVARCHAR(50),
BatchName NVARCHAR(50),
docNumber NVARCHAR(50),
ProfileUsed NVARCHAR(50),
TotalPages NVARCHAR(50),
SortOrder NVARCHAR(50)
);
SELECT
[BI].[DocumentIndexID],
[BI].[BatchName],
[BI].[docNumber],
[BI].[ProfileUsed],
[AR].[SortOrder]
FROM
BatchIndexing BI
INNER JOIN
@Memory AR ON [BI].[docNumber] = [AR].[docNumber]
WHERE
[BI].[BatchName] = @BatchName + ' ' + @BatchNumber
ORDER BY
[AR].[SortOrder] ASC
DECLARE @Heather NVARCHAR(50)
DECLARE found CURSOR FOR
SELECT DISTINCT SortOrder
FROM @Omega
OPEN found
FETCH NEXT FROM found INTO @Heather
DECLARE @I NVARCHAR(50)
SET @I = (SELECT DocumentIndexID FROM @Omega WHERE SortOrder = '1')
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @Spawn NVARCHAR(50)
SET @Spawn = (SELECT IndexingFields.FieldValue FROM IndexingFields
WHERE IndexingFields.FieldName = 'Docket #' AND IndexingFields.DocumentIndexID = (SELECT DocumentIndexID FROM @Omega
WHERE SortOrder = @Heather))
IF @Spawn IS NULL
BEGIN
UPDATE IndexingFields
SET FieldValue = (SELECT FieldValue FROM IndexingFields WHERE DocumentIndexID = @I AND FieldName = 'Docket #')
WHERE DocumentIndexID = (SELECT DocumentIndexID FROM @Omega WHERE SortOrder = @Heather)
AND FieldName = 'Docket #';
END
ELSE
BEGIN
SET @I = (SELECT DocumentIndexID FROM @Omega WHERE SortOrder = @Heather)
FETCH NEXT FROM found INTO @Heather
END
END
DECLARE @Dori NVARCHAR(50)
DECLARE favor CURSOR FOR SELECT DISTINcT SortOrder FROM @Omega
OPEN favor
FETCH NEXT FROM favor INTO @Dori
SET @I = (SELECT DocumentIndexID FROM @Omega WHERE SortOrder = '1')
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Spawn = (SELECT FieldValue FROM IndexingFields
WHERE IndexingFields.FieldName = 'Barcode' AND IndexingFields.DocumentIndexID = (SELECT DocumentIndexID FROM @Omega
WHERE SortOrder = @Heather))
IF @Spawn IS NULL
BEGIN
UPDATE IndexingFields
SET FieldValue = (SELECT FieldValue FROM IndexingFields WHERE DocumentIndexID = @I AND FieldName = 'Barcode')
WHERE DocumentIndexID = (SELECT DocumentIndexID FROM @Omega WHERE SortOrder = @Dori)
AND FieldName = 'Barcode'
DECLARE @Administrator NVARCHAR(50)
SET @Administrator = 'UPDATE ' + @Batch_Reports + ' SET IsIndexed = 1
WHERE docNumber = Omega.docNumber
AND Omega.SortOrder = ' + @Heather
EXEC (@Administrator)
DECLARE @Transporter NVARCHAR(50)
SET @Transporter = 'UPDATE Batches SET CurrentModule = QC Index
WHERE BatchName = ' + @BatchName + ' ' + @BatchNumber
EXEC (@Transporter)
END
ELSE
BEGIN
SET @I = (SELECT DocumentIndexID FROM @Omega WHERE SortOrder = @Dori)
FETCH NEXT FROM found INTO @Heather
END
END
END
GO