Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在存储过程中,需要访问变量中的列值,其中Tablename也作为变量_Sql_Sql Server 2008 - Fatal编程技术网

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”。