1
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 +')'

これにも同様に

exec(@sql) 

END

END
GO

MemberID を変数 @ID に入れる必要があります

こんにちは、以下で説明するように、いくつかの変更を加えました

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

しかし、次のようにエラーが発生します:

プロシージャは、タイプ 'ntext/nchar/nvarchar' のパラメーター '@parameters' を想定しています。

4

3 に答える 3

1

sp_executesql動的クエリの仮引数が宣言されている場所のパラメーターは'@id nvarchar(max)output'、Unicode 文字列である必要があります。NTransact-SQL では、文字列定数が実際には Unicode 文字列であることを指定するには、次のように開始引用符の前に置く必要があります。

N'@id nvarchar(max)output'

したがって、次のUSP_TESTSPようになります。

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,N'@id nvarchar(max)output',@id=@id output
    --select exec (@SQL)

END
于 2012-08-27T18:48:18.140 に答える
1

sp_executesql出力パラメーターでの使用を検討してください。

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
于 2012-08-27T16:28:39.517 に答える
0

わたしにはできる:

select @SQL='SELECT @FAMILYID=MemberID FROM'+' '+@TBLNAME+' '+'where TrId='+@TrID
select EXEC(@SQL)
于 2012-08-27T16:36:27.900 に答える