文字列を連結してプロシージャに渡したいのですが...最初の例ではハードコード化されていますが、動的ファイル名を渡す必要がありますこのハードコードは正常に動作します動作するように以下の障害の1 ...変数を使用してストアドプロシージャにパラメータを渡すことはできません
を取得するには:
exec master.dbo.sp_getfiledetails_CC 'c:\temp\test file.xml'
, @filedate = @FileDateTime OUTPUT
これはしません:
DECLARE @CCTMP as varchar(max)
set @cctmp = 'master.dbo.sp_getfiledetails_CC ''c:\temp\text file.xml''
, @filedate = @FileDateTime OUTPUT'
exec @cctmp
これはどちらかない:
DECLARE @CCTMP as varchar(max)
DECLARE @FileName as varchar(max)
set @filename = 'c:\temp\text file.xml'
set @cctmp = 'master.dbo.sp_getfiledetails_CC ' + @filename +'
, @filedate = @FileDateTime OUTPUT'
exec @cctmp
そして、どちらもこの行います
DECLARE @FileName as varchar(max)
set @filename = 'c:\temp\text file.xml'
exec master.dbo.sp_getfiledetails_CC ' + @filename +'
, @filedate = @FileDateTime OUTPUT'
これが手順です:。
[DBO] [sp_getfiledetails_CC]
(
@filename NVARCHAR(255) = NULL --(full path)
,@filedate DATETIME OUTPUT
)
AS
DECLARE @fileobj INT , @fsobj INT
DECLARE @exists INT, @error INT
DECLARE @src VARCHAR(255), @desc VARCHAR(255)
--create FileSystem Object
EXEC @error = sp_OACreate 'Scripting.FileSystemObject', @fsobj OUT
IF @error <> 0
BEGIN
EXEC sp_OAGetErrorInfo @fsobj, @src OUT, @desc OUT
SELECT error=CONVERT(varbinary(4),@error), [email protected], [email protected]
RETURN 2
END
--check if specified file exists
EXEC @error = sp_OAMethod @fsobj, 'FileExists', @exists OUT, @filename
IF @exists = 0
BEGIN
--RAISERROR 22004 'The system cannot find the file specified.'
RETURN 2
END
--Create file object that points to specified file
EXEC @error = sp_OAMethod @fsobj, 'GetFile' , @fileobj OUTPUT, @filename
IF @error <> 0
BEGIN
EXEC sp_OAGetErrorInfo @fsobj
RETURN 2
END
--Declare variables holding properties of file
DECLARE @Attributes TINYINT,
@DateCreated DATETIME,
@DateLastAccessed DATETIME,
@DateLastModified DATETIME,
@Drive VARCHAR(1),
@Name NVARCHAR(255),
@ParentFolder NVARCHAR(255),
@Path NVARCHAR(255),
@ShortPath NVARCHAR(255),
@Size INT,
@Type NVARCHAR(255)
--Get properties of fileobject
EXEC sp_OAGetProperty @fileobj, 'Attributes', @Attributes OUT
EXEC sp_OAGetProperty @fileobj, 'DateCreated', @DateCreated OUT
EXEC sp_OAGetProperty @fileobj, 'DateLastAccessed', @DateLastAccessed OUT
EXEC sp_OAGetProperty @fileobj, 'DateLastModified', @DateLastModified OUT
EXEC sp_OAGetProperty @fileobj, 'Drive', @Drive OUT
EXEC sp_OAGetProperty @fileobj, 'Name', @Name OUT
EXEC sp_OAGetProperty @fileobj, 'ParentFolder', @ParentFolder OUT
EXEC sp_OAGetProperty @fileobj, 'Path', @Path OUT
EXEC sp_OAGetProperty @fileobj, 'ShortPath', @ShortPath OUT
EXEC sp_OAGetProperty @fileobj, 'Size', @Size OUT
EXEC sp_OAGetProperty @fileobj, 'Type', @Type OUT
--destroy File Object
EXEC @error = sp_OADestroy @fileobj
IF @error <> 0
BEGIN
EXEC sp_OAGetErrorInfo @fileobj
RETURN
END
--destroy FileSystem Object
EXEC @error = sp_OADestroy @fsobj
IF @error <> 0
BEGIN
EXEC sp_OAGetErrorInfo @fsobj
RETURN 2
END
--return results
SELECT NULL AS [Alternate Name],
@Size AS [Size],
CONVERT(varchar, @DateCreated, 112) AS [Creation Date],
REPLACE(CONVERT(varchar, @DateCreated, 108), ':', '') AS [Creation Time],
CONVERT(varchar, @DateLastModified, 112) AS [Last Written Date],
REPLACE(CONVERT(varchar, @DateLastModified, 108), ':', '') AS [Last Written Time],
CONVERT(varchar, @DateLastAccessed, 112) AS [Last Accessed Date],
REPLACE(CONVERT(varchar, @DateLastAccessed, 108), ':', '') AS [Last Accessed Time],
@Attributes AS [Attributes]
--SET @filedate = REPLACE(CONVERT(varchar, @DateLastModified, 108), ':', '')
set @filedate = convert(datetime, CONVERT(float,@DateLastModified))
sp_executesqlを試しましたか? https://msdn.microsoft.com/en-us/library/ms188001.aspx –
通常、何かが動作しないと言っているのではなく、エラーメッセージや何が間違っているのかなどの説明が含まれています。 –
@James Zこの手順では何も返されません –