Sql 在存储过程中,需要访问变量中的列值,其中Tablename也作为变量
在这一行,它给了我一个错误Sql 在存储过程中,需要访问变量中的列值,其中Tablename也作为变量,sql,sql-server-2008,Sql,Sql Server 2008,在这一行,它给了我一个错误 CREATE PROCEDURE dbo.usp_testing AS BEGIN DECLARE @STATE INT,@TBLNAME sysname,@TrID VARCHAR(50),@FAMILYID VARCHAR(50),@SQL varchar(8000) DECLARE cur CURSOR FOR SELECT TrID,TableName FROM LogTable WHERE Prefix='vid' AND YEAR(DateTime)
CREATE PROCEDURE dbo.usp_testing
AS
BEGIN
DECLARE @STATE INT,@TBLNAME sysname,@TrID VARCHAR(50),@FAMILYID VARCHAR(50),@SQL varchar(8000)
DECLARE cur CURSOR FOR
SELECT TrID,TableName
FROM LogTable
WHERE Prefix='vid'
AND YEAR(DateTime)=YEAR(GETDATE())AND MONTH(DateTime)=MONTH(GETDATE())AND DAY(DateTime)=DAY(GETDATE())
OPEN cur
FETCH NEXT FROM cur
INTO @TrID,@TBLNAME
IF(@TBLNAME='Student' OR @TBLNAME='Family' OR @TBLNAME='College')
BEGIN
**select @SQL='SELECT MemberID FROM'+' '+@TBLNAME+' '+'where TrId='+@TrID
select @FAMILYID=EXEC(@SQL)**
在这方面也是如此
select @SQL='select @ID=(SELECT MemberID FROM'+' '+@TBLNAME+' '+'where TrId='+@TrID +')'
我需要将MemberID放入变量@ID中
您好,我做了如下所述的一些更改
exec(@sql)
END
END
GO
但得到的错误如下所示:
过程需要类型为“ntext/nchar/nvarchar”的参数“@parameters”
考虑与输出参数一起使用:
ALTER PROCEDURE [dbo].[USP_TESTSP]
AS
BEGIN
DECLARE @SQL nvarchar(max),@TABLENAME sysname,@id nvarchar(max)
SELECT @TABLENAME='student'
select @SQL= 'select @id=MemberID FROM'+' '+@TABLENAME+' '+'where TrId=11091'
exec sp_executesql @SQL,'@id nvarchar(max)output',@id=@id output
--select exec (@SQL)
END
这对我很有用:
declare @SQL nvarchar(max)
set @SQL='SELECT @FAMILYID = MemberID FROM ' + @TBLNAME + ' where TrId=' + @TrID
exec sp_executesql @SQL, N'@FAMILYID int out', @FAMILYID = @FAMILYID out
声明动态查询的形式参数的
sp_executesql
的参数'@id nvarchar(max)output'
,应该是unicode字符串。在Transact-SQL中,要指定字符串常量实际上是unicode字符串,需要将N
放在开头引号之前,如下所示:
select @SQL='SELECT @FAMILYID=MemberID FROM'+' '+@TBLNAME+' '+'where TrId='+@TrID
select EXEC(@SQL)
N'@id nvarchar(max)output'
因此,您的USP\u TESTSP
应该如下所示:
select @SQL='SELECT @FAMILYID=MemberID FROM'+' '+@TBLNAME+' '+'where TrId='+@TrID
select EXEC(@SQL)
N'@id nvarchar(max)output'
ALTER程序[dbo]。[USP\u TESTSP]
作为
开始
声明@SQL-nvarchar(max)、@TABLENAME-sysname、@id-nvarchar(max)
选择@TABLENAME='student'
选择@SQL='从“++'+@TABLENAME++'+'中选择@id=MemberID,其中TrId=11091'
exec sp_executesql@SQL,N'@id nvarchar(max)output',@id=@id output
--选择exec(@SQL)
结束
对于我来说,此打印必须声明标量变量“@familyid”您使用的是哪个版本的SQL Server?它不适用于SQL Server 2008。它给出的错误与你上面提到的相同是的,我确认。现在我看到的是一个sql server.g错误:过程期望@andomar解决方案的参数'@parameters'类型为'ntext/nchar/nvarchar',获取错误为:过程期望参数'@parameters'类型为'ntext/nchar/nvarchar'。也许你必须将'@FAMILYID int out'
更改为'@FAMILYID nvarchar(max)out'
?我做了!!!我编辑了我的上述问题。正如我在SQL server上向您提到的那样,我面临着错误2008@Vids:抱歉,第二个参数应该是unicode,正如AndriyM所建议的那样。现在这个答案也更新了。我得到了无效的列名“11091”。