PDA

View Full Version : ذخیره ی کوئری در متغیر و اجرای آن



HOSSEINONLINE7
جمعه 25 اردیبهشت 1394, 20:04 عصر
سلام یک کوئری دارم که اطلاعاتی را در جدول موقتی Insert میکنه . میخوام این کوئری را در متغیری با شرطی که میخوام ذخیره کنم بعد execute کنم ولی به نام جدول گیر میده .

وقتی کوئری را اجرا میکنم خطا میده Must declare the table variable "@tblLogType".

نام جدول را هر طور میگذارم خطا میده .


DECLARE @tblLogType TABLE (
LogID bigint,
UserID int,
ParameterName varchar(MAX),
PageAddress nvarchar(MAX),
MeterBodyCode nvarchar(50),
MeterName nvarchar(50),
RecordID bigint,
Opration smallint,
Date_Fa nvarchar(MAX),
BillNo nvarchar(50),
AreaName nvarchar(50)

)


Set @Sql = ('Insert Into @tblLogType

SELECT
LogID,
UserID,
ParameterName,
PageAddress,
MeterBodyCode,
MeterName,
RecordID,
Opration,
Date_Fa,
BillNo,
AreaName
from tbl_Log as l left Outer Join tbl_Meter as m on l.RecordID = m.MeterID
left Outer Join tbl_Bill as b on l.RecordID = b.BillID
left Outer Join tbl_Parameter as p on l.RecordID = p.ParameterID
left Outer Join tbl_Area as a on l.RecordID = a.AreaID ')

if(@UserID != Null)
Set @Sql = @Sql + 'Where UserID = ' + @UserID
exec sp_executesql @Sql=@Sql

مهدی نان شکری
شنبه 26 اردیبهشت 1394, 11:59 صبح
با سلام
شما نمی توانید با دستور EXEC و یا sp_executesql و کوئری dynamic به table variable تعریف شده در خارج از محدوده Exec و یا sp_executesql دسترسی داشته باشید.
برای این کار می بایست تعریف table variable در درون کوئری dynamic ایجاد شود تا به وسیله آن قابل دستیابی باشد. و یا شما از temporary tables استفاده نمایید.


create table #tblLogType
(
LogID bigint,
UserID int,
ParameterName varchar(MAX),
PageAddress nvarchar(MAX),
MeterBodyCode nvarchar(50),
MeterName nvarchar(50),
RecordID bigint,
Opration smallint,
Date_Fa nvarchar(MAX),
BillNo nvarchar(50),
AreaName nvarchar(50)
)