你好我想要连接两个东西,一个是字符串,另一个是int变量。现在,这些东西我想存储在一个变量中,并在select查询中使用该变量作为into类型,以使用sql server在存储过程中创建temptable。
这是我的查询
USE [FlightExamSoftware]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- For Storing Question in Temp table
-- EXEC [GetQuestionListPerSubjectRatioWise] 1,11
ALTER PROCEDURE [dbo].[GetQuestionListPerSubjectRatioWise]
@SubjectID INT,
@NumberOfQue INT,
@UserID int
AS
BEGIN
DECLARE @strQuery VARCHAR(MAX);
DECLARE @PerChapQue INT;
DECLARE @tempTable VARCHAR(MAX) = 'tempTestUser' + @UserID;
SELECT @PerChapQue = COUNT(appQueID)/@NumberOfQue FROM tblQuestion WHERE appQueSubID=@SubjectID
SELECT COUNT(appQueID)/@PerChapQue ChapwiseQue
,CASE WHEN COUNT(appQueID)>=@PerChapQue THEN COUNT(appQueID)/@PerChapQue ELSE 1 END ChapWiseQuePlusOne
,appQueChapID into @tempTable
FROM tblQuestion
WHERE appQueSubID=@SubjectID
GROUP BY appQueChapID
END
现在,我在谈论这些行
DECLARE @tempTable VARCHAR(MAX) = 'tempTestUser' + @UserID;
在这两行中,两个是concate,一个是string,另一个是int。并存储在varchar变量中。
并用于以下选择查询,即
SELECT COUNT(appQueID)/@PerChapQue ChapwiseQue
,CASE WHEN COUNT(appQueID)>=@PerChapQue THEN COUNT(appQueID)/@PerChapQue ELSE 1 END ChapWiseQuePlusOne
,appQueChapID into @tempTable
FROM tblQuestion
WHERE appQueSubID=@SubjectID
GROUP BY appQueChapID
END
现在,在这些查询中,我想创建一个名为@tempTable
的临时表。
但是,在这些行中它显示错误,即Incorrect syntax near '@tempTable'.
混淆语法在哪里错误。
谢谢。
答案 0 :(得分:2)
您的代码存在许多问题。
将int连接到字符串时,必须先将int转换为varchar。否则,SQL Server将尝试将字符串隐式转换为int,这将导致错误
所以这个:DECLARE @tempTable VARCHAR(MAX) = 'tempTestUser' + @UserID;
应该成为这个:
DECLARE @tempTable VARCHAR(MAX) = 'tempTestUser' + CAST(@UserID AS VARCHAR(11));
(你需要11个字符才能符合int的最小值:-2,147,483,648)
您不能将select...into
与表格变量一起使用
您只能将它用于实际表格(临时或常规)。
您的@tempTable
甚至不是表格变量(不会对select...into
有帮助。)
即使您使用select...into
正确的方法,除非您打算使用全局临时表(并且没有它的风险),除非您的存储过程使用此临时表之后,它将毫无用处,因为临时表与范围绑定。
考虑到所有这些,我不确定你实际上在寻找什么输出。如果您可以编辑您的问题以包含存储过程的所需输出以及一些示例数据作为DDL + DML,则可以更轻松地帮助您编写更好的代码。