View Full Version : مبتدی: اینتر در sql
undefined
جمعه 19 آذر 1389, 21:53 عصر
با سلام
دوستان من میخوام از دستور زیر در C#.Net استفاده کنم البته نسخه SQL Server هم 2005 استفاده میکنم .
مشکلی که دارم اینه که باید بعد از بعضی از دستور ها اینتر بزنم که متاسفانه نمیتونم . مانند دستور Create و غیره .
ممنون میشم راهنمایی کنید .
Rezahak
جمعه 19 آذر 1389, 22:04 عصر
اصلا منظورتون واضح نیست لطفا بیشتر توضیح بدهید!!!!
undefined
جمعه 19 آذر 1389, 22:14 عصر
عذر میخوام فراموش کردم کد را اضافه کنم
کد C#
sql = "IF OBJECT_ID('t', 'V') IS NOT NULL"
+ " BEGIN"
+ " DROP VIEW [t]"
+ " END"
+ " CREATE VIEW [t]"
+ " AS"
+ " " + sql
+ " SELECT *"
+ " FROM (SELECT ROW_NUMBER() OVER(" + sqlOrder + ") AS"
+ " rownum, * FROM [t]) AS Salaries1"
+ " WHERE rownum between " + pageSart + " and " + pageEnd
+ " DROP VIEW [t]";
کد SQL
IF OBJECT_ID('t', 'V') IS NOT NULL BEGIN DROP VIEW [t] END CREATE VIEW [t] AS select (select top 1 id from test WHERE mah = S.mah ) as id , (select top 1 sharh from test WHERE mah = S.mah ) as sharh , SUM(mablagh) as mablagh , mah from test S WHERE sharh like ''%ی%'' group by mah SELECT * FROM (SELECT ROW_NUMBER() OVER( order by S.mablagh DESC) AS rownum, * FROM [t]) AS Salaries1 WHERE rownum between 1 and 6 DROP VIEW [t]
همین کد SQL رو که تست کنید میبینید که بر روی creat ایراد میگیره .
اینم بگم که از \r\n و تابع Char هم استفاده کردم اما متاسفانه نشد .
Rezahak
جمعه 19 آذر 1389, 22:26 عصر
خب دوست عزیز شما تمام این کد را در قالب یک stored procedure در sql server ذخیره کن و وقتی خواستی در c# یا هر زبان برنامه نویسی دیگری آنرا اجرا کنی فقط کافی است نام آن sp را صدا بزنی - البته با استفاده از شیء sqlcommand
undefined
جمعه 19 آذر 1389, 22:28 عصر
متاسفانه دستور ORDER در SP به درستی جواب نمیده .
یعنی اصلا مرتب نمیکنه . :افسرده:
Rezahak
جمعه 19 آذر 1389, 22:57 عصر
متاسفانه دستور ORDER در SP به درستی جواب نمیده .
یعنی اصلا مرتب نمیکنه . :افسرده:
این چیزی که شما نوشتید اصلا صحت ندارد!!!
undefined
جمعه 19 آذر 1389, 23:17 عصر
دوست من تست کردم که میگم :ناراحت:
این هم SPی که نوشتم
create proc report_generator_paging
@pageNo int,
@rowCount int,
@sql varchar(8000),
@order varchar(90)
as
begin
EXEC('
CREATE VIEW [t]
AS
'+@sql+'
')
SELECT *
FROM (SELECT ROW_NUMBER() OVER(order by @order) AS
rownum, * FROM t) AS Salaries1
WHERE rownum between((@pageNo)*@rowCount)+1 and ((@pageNo+1)*@rowCount)
DROP VIEW [t]
end
GO
Rezahak
جمعه 19 آذر 1389, 23:46 عصر
دوست عزیز این کدی رو که نوشتی یه ذره سختش کردی شما یا View باید بنویسی یا SP .
شما می تونی یک VIEW درست کنی و بدون توجه به شرایط و پارامترها آنرا به طور کلی ایجاد کنی و هر وقت خواستی در برنامه آنرا صدا بزنی شرایط را بر حسب پارامترهای دریافتی اعمال کرده و مرتب سازی کنی
یا این که در این مورد که نوشتید یک function جدید با مقدار برگشتی table ایجاد کرده و تمام پارامترها رادر آن منظور کنید و در برنامه آن function را صدا بزنید
حمیدرضاصادقیان
شنبه 20 آذر 1389, 06:45 صبح
order by @order
شما باید Query دوم هم به صورت dynamic sql بنویسید. زیرا order اینجا یک فیلده و مقدار نیست که شما به صورت مستقیم در عبارت order by به کار بردید. به همین خاطره که اجرا نمیشه.
اگر کوئری دوم هم با استفاده از exec بنویسید مشکل حل میشه.
موفق باشید
undefined
شنبه 20 آذر 1389, 09:27 صبح
دوست عزیز این کدی رو که نوشتی یه ذره سختش کردی شما یا View باید بنویسی یا SP .
شما می تونی یک VIEW درست کنی و بدون توجه به شرایط و پارامترها آنرا به طور کلی ایجاد کنی و هر وقت خواستی در برنامه آنرا صدا بزنی شرایط را بر حسب پارامترهای دریافتی اعمال کرده و مرتب سازی کنی
یا این که در این مورد که نوشتید یک function جدید با مقدار برگشتی table ایجاد کرده و تمام پارامترها رادر آن منظور کنید و در برنامه آن function را صدا بزنید
ابتدا از جناب صادقیان تشکر میکنم بخاطر راهنمایی بی نقصشون .
راستش به خاطر شرایت خاصی که در برنامه دارم بهترین راه (البته در تا جایی که آموخته هام کمکم میکنه) همینه که استفاده کردم چون Query داینامیک ساخته میشن و معمولا دسته بندی هم دارن .
با تشکر
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.